欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-04 17:17:22
要求:页面上有一个add按钮,每点击一次该按钮,页面上动态创建一个webpartzone!   提醒:webpartzone只能在oninit或之前才能创建,否则报异常!...
要求:页面上有一个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