当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET 页面中动态增加的控件、添加事件第1/2页

ASP.NET 页面中动态增加的控件、添加事件第1/2页

2017年12月12日  | 移动技术网IT编程  | 我要评论

cf灵狐者内衣,田螺,中华萌国传

要求:页面上有一个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("<asp:button id='button3' text='btn3' commandname='btn' commandargument='b3' runat='server' />"); //将字符串转换成web控件
control c4 = parsecontrol("<asp:button id='button4' text='btn4' commandname='btn' commandargument='b4' runat='server' />");
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("<asp:button text = '按我' id = 'mybutton' commandargument = 'b' runat = 'server' />");

//将控件添加大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("<script language = 'javascript' type = 'text/javascript'><!--
alert('" + e.commandargument.tostring() + "');
// --></script>");
}

1

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网