要求:页面上有一个Add按钮,每点击一次该按钮,页面上动态创建一个WebPartZone!

提醒:WebPartZone只能在OnInit或之前才能创建,否则报异常!

大家都知道,按钮的点击事件是在RaisePostbackEvent时触发的,这意味着点击事件在OnLoad阶段之后才执行,远远落后于 OnInit阶段,而且ViewState在OnLoad时才准备好,OnInit以及之前的阶段根本就不能使用ViewState!如果试图在按钮点击事件里面创建WebPartZone等控件,唯一的后果就是页面出错;而如果在OnInit里面创建控件,由于ViewState没有准备好,那么有些数据比如当前需要创建的个数(存在ViewState里面)就无法获得!

目前对这个问题我还没有找到什么好的解决方案,经过实验,勉强得出一个不怎么优雅的方案,就是利用HiddenField保存数据,然后直接使用Request.Form["XXX"]在OnInit阶段取得数据;而判断是否点击按钮也是通过Request.Form是否存在对应数据来判断的!废话不多说了,大家看看代码吧!

private void Page_Load(object sender, System.EventArgs e)

{

Button Button1 = new Button();

Button1.CommandArgument = "b1";

Button1.Text = "Btn1";

Button1.Command += new CommandEventHandler(this.OnButton);

PlaceHolder1.Controls.Add(Button1);

Button Button2 = new Button();

Button2.CommandArgument = "b2";

Button2.Text = "Btn2";

Button2.Command += new CommandEventHandler(this.OnButton);

PlaceHolder1.Controls.Add(Button2);

Control c3 = ParseControl(""); //将字符串转换成web控件

Control c4 = ParseControl("");

PlaceHolder1.Controls.Add(c3);

PlaceHolder1.Controls.Add(c4);

Button myBut = (Button)Page.FindControl("Button3");

myBut.Command += new CommandEventHandler(this.OnButton);

Button myBut2 = (Button)Page.FindControl("Button4");

myBut2.Command += new CommandEventHandler(this.OnButton);

}

public void OnButton(Object Sender, CommandEventArgs e)

{

switch (e.CommandArgument.ToString().ToLower())

{

case "b1":

Label1.Text = "Button 1";

break;

case "b2":

Label1.Text = "Button 2";

break;

case "b3":

Label1.Text = "Button 3";

break;

case "b4":

Label1.Text = "Button 4";

break;

};

}

asp.net为控件动态添加事件

实现的功能是在网页上的Panel中动态添加一个Button,并为这个Button写一个单击事件。

动态添加控件的事件,语句:

Control.Command += new CommandEventHandler(this.EventFun);

具体的代码请看下面:

需要特别注意的是:

添加控件和给控件加事件时绝对不能放到 if(!IsPostback){}里面,那样的话,点击一次后控件会消失,而且事件也不

会执行。

protected void Page_Load(object sender, EventArgs e)

{

//将输入字符串分析为System.Web.UI.Control对象,b为传进去的值

Control c = ParseControl("");

//将控件添加大Panel中

this.Panel1.Controls.Add(c);

//查找页面名为myButton的控件

Button Button = (Button)Page.FindControl("myButton");

//添加事件On_Button

Button.Command += new CommandEventHandler(this.On_Button);

}

//CommandEventArgs为command事件提供数据

protected void On_Button(Object sender,CommandEventArgs e)

{

Response.Write("

alert('" + e.CommandArgument.ToString() + "');

// -->");

}

asp.net 中服务器端控件动态添加事件和删除事------------------------------------------

PlaceHolder :控件容器,本身不显示,主要用来放服务器控件的,只显示其子元素(他里面的控件)

服务器控件动态添加和删除

PlaceHolder 中动态添加服务器端控件

添加控件的一般方法:

声明一个新控件 如 label lb =new label()

设置控件属性 如:lb.text="text"

添加控件到 PlaceHolder 中 如: PlaceHolder1.controls.add(lb)

可以用 ViewState[AddedControl]=null 判断是不是第一次执行

动态添加控件,如果需要数据绑定,要先添加控件,然后再数据绑定,提交后(postback) 就不需要重新绑定了

new 一下就可以了,如:

if ((ViewState[AddedControl] != null) & ((bool)ViewState[AddedControl]))//第二次就不要数据绑定了

{

ph1.Controls.Clear();//清除ph1中的控件

DropDownList dpl = new DropDownList();

dpl.ID = "controlid";

dpl.AutoPostBack = true;

ph1.Controls.Add(dpl);

}

else

{

ph1.Controls.Clear();

DropDownList dpl = new DropDownList();

dpl.ID = "controlid";

dpl.AutoPostBack = true;

ph1.Controls.Add(dpl);

//链接数据库,设置数据源等 略

dpl.DataBind();

ViewState[AddedControl] = true;

}

panel中动态添加服务器端控件

在一个panel 中添加datagrid 并且绑定数据

Panel panel1 = new Panel();

panel1.Style["top"] = "200px";//设置属性

this.Controls.Add(panel1);

DataGrid dg1 = new DataGrid();//定义datagrid

BoundColumn s1 = new BoundColumn();//定义一列

s1.DataField = "first";//绑定列的数据源

s1.HeaderText = "mzi";//此列标题等属性设置

dg1.Columns.Add(s1);//加入此列

dg1.BackColor = "#00000";

dg1.CellPadding=3;

//设置 dg1的属性等

panel1.Controls.Add(dg1);

给动态添加的控件添加事件:

如:给button 添加事件

//添加按钮1

Button bt1 = new Button();

bt1.CommandArgument = "bt1";//设置命令参数

bt1.Text = "daji";

bt1.Command += new CommandEventHandler(this.onbutton);//预定事件

ph1.Controls.Add(bt1);

//添加按钮2,又一种方法

Control cs = ParseControl("");//把字符串转化为控件

ph1.Controls.Add(cs);

Button bt2 = (Button)Page.FindControl("button2");

bt2.Command += new CommandEventHandler(this.onbutton);//给bt2添加事件

}

public void onbutton(object sender, CommandEventArgs e)

{

lab1.text = "label1";

}

这样二个按钮都对应一个函数,执行同一个事件

如果想让他们执行不同事件,

可以这样写:

public void onbutton(object sender, CommandEventArgs e)

{

switch (e.CommandArgument.ToString().ToLower()) 获取命令参数,根据参数的不同,执行不同命令

{

case "bt1":lab1.text = "label1"; break;

case "bt2":lab1.text = "label2"; break;

}

}

:在table中添加行和服务器端控件

在table中添加一行二列 table要转化服务器端控件

代码如下:

HtmlTableRow tr1 = new HtmlTableRow();//定义行

HtmlTableCell td1 = new HtmlTableCell();//定义列

Label lb1 = new Label();// 定义 lb1 为Label控件

lb1.Text = txt[m];//lb1

td1.Controls.Add(lb1);//列中添加lbl

HtmlTableCell td2 = new HtmlTableCell();//定义列

TextBox txt1 = new TextBox();//textbox

txt1.Text = namevalue[m];//text

txt1.ID = "t" + m;//id

td2.Controls.Add(txt1);列中添加txt1

tr1.Cells.Add(td1);//行中添加列td1

tr1.Cells.Add(td2);//行中添加列td1

TABLE1.Rows.Add(tr1);//表中添加行

取得textbox中数据方法:

((TextBox)(TABLE1.Rows[m].FindControl("t" + m))).Text 第m行 id 为"t"+m的控件的值

添加html 控件,可以用 response.write("")

为服务器端控件添加客户端事件方法;

如:buttton.Attributes["onclick"] = "javascript:alert('shijain')";

asp.net panel 加html,ASP.NET 页面中动态增加的控件、添加事件相关推荐

  1. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

    第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...

  2. ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

    第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.N ...

  3. 在asp.net中为Web用户控件添加属性和事件

    在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的 ...

  4. 在jsp页面中使用My97DatePicker日期控件

    直接看图看代码! My97DatePicker日期控件是一个功能非常强大的日期插件,功能丰富,调用方便,配置也很灵活!至于该日期插件为什么要叫My97DatePicker这个名字呢?这个你们要去问作者 ...

  5. 在ASP.NET页面中动态添加控件

    今天被问到如何在ASP.NET 页面中动态创建一批控件,并且希望在后续代码中能访问到这些动态创建的控件.我用下面的例子来解释这个问题 ================================= ...

  6. ASP.NET中基于ExtJS的控件Ext.net的使用

    ExtNet是国外一家公司开发的基于ExtJS的ASP.NET控件库. 1.新建项目Layout_Anchor 2.引用Ext.Net.dll 3.在Web.config文件中的web节点加入 < ...

  7. asp.net 动态创建TextBox控件 如何加载状态信息

    接着上文Asp.net TextBox的TextChanged事件你真的清楚吗? 这里我们来说说状态数据时如何加载的. 虽然在Control中有调用状态转存的方法,但是这里有一个判断条件 if (_c ...

  8. Asp.Net 中使用客户端Activex控件需要注意的事情

    案例:Asp.Net +VB制作的Activex控件 操作系统:Windows2003 +Sp1 现象1:通过     <OBJECT classid="CLSID:132A80F5- ...

  9. ASP.NET中AJAX的UpdatePannel控件的用法

    ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果.其中的UpdatePanel就是设置页面中异 步局部更新区域,它必须依赖于ScriptManager存在, ...

最新文章

  1. 一个popup弹窗实现思路--(基于mintui分析)
  2. 老工程师谈电子物料:别拿一分钱不当回事!
  3. Java 面向对象:多态的理解
  4. ReportLab for PDF
  5. c语言异或运算符_计算机中C语言的-运算符
  6. CABasicAnimation animationWithKeyPath Types
  7. php 小米路由器_云水日记-捣鼓小米路由器开发版本
  8. 如果发现头目玩阴谋,要小心
  9. 寻找春天amp;nbsp;九宫格日记-2014.04.26
  10. 好玩的黑客游戏(过把黑客的瘾)
  11. TMS320C5509A 控制DDS AD9854芯片进行AM幅度调制时的FIR滤波处理
  12. Spring Cloud Bus 使用说明
  13. 2020德勤面试开始了吗_四大2020年春招时间曝光!
  14. blender报错“RuntimeError: Operator bpy.ops.object.mode_set.poll() Context missing active object”
  15. 模式识别类毕业论文文献都有哪些?
  16. drools-insert与update
  17. 四阶龙格库塔法的基本思想_经典四阶龙格库塔法解一阶微分方程组讲义.doc
  18. C++练手小项目:职工工资信息管理系统
  19. 用JAVA正则表达式轻松替换JSON中大字段
  20. WuThreat身份安全云-TVD每日漏洞情报-2023-05-30

热门文章

  1. 皮一皮:这是。。。养了个白眼狼???
  2. 深圳一普通中学老师工资单曝光,秒杀程序员,网友:真酸~
  3. 两个奇技淫巧,将 Docker 镜像体积减小 99%
  4. rm 空间不释放_rm删除文件之后,空间就被释放了吗?
  5. 帝国cms微信小程序算命小程序开发之指纹算命实现方法
  6. torch distributed 多GPU训练笔记
  7. YOLOF 速度和效果均超过YOLOv4的检测模型
  8. c++ 指针的指针参数
  9. pytorch 归一化与反归一化
  10. fatal error C1021: 无效的预处理器命令“warning”