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

要求:页面上有一个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/2页 12下一页阅读全文

时间: 2024-07-28 15:58:31

ASP.NET 页面中动态增加的控件、添加事件第1/2页_实用技巧的相关文章

asp.net 动态创建TextBox控件及状态数据如何加载_实用技巧

接着上文Asp.net TextBox的TextChanged事件你真的清楚吗? 这里我们来说说状态数据时如何加载的.虽然在Control中有调用状态转存的方法,但是这里有一个判断条件 if (_controlState >= ControlState.ViewStateLoaded) 一般的get请求这里的条件是不满足的. 复制代码 代码如下: internal enum ControlState { Constructed, FrameworkInitialized, ChildrenIni

asp.net中将数据库绑定到DataList控件的实现方法与实例代码_实用技巧

解决方法1: datalist databind() 解决方法2: 查看MSDN上的详细说明资料 解决方法3: 在DataList的模板中用table表格,如: 复制代码 代码如下: <asp:DataList ID="dlDetailedInfo" runat="server" OnItemDataBound="dlDetailedInfo_ItemDataBound" Width="100%"> <Ite

ASP.NET中TextBox使用Ajax控件显示日期不全的问题解决方法_实用技巧

正常的引用 复制代码 代码如下: <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="AjaxToolKit" %><asp:TextBox ID="txtRecordTime" runat="server" cssclass="style" width

JS脚本实现动态给标签控件添加事件的方法_javascript技巧

本文实例讲述了JS脚本实现动态给标签控件添加事件的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &l

递归输出ASP.NET页面所有控件的类型和ID的代码_实用技巧

写一个方法: 复制代码 代码如下: private void DisplayAllControl(Control control, int step) { foreach (Control ctl in control.Controls) { string s = new string('-', step * 4) + ctl.GetType().Name + "〈" + ctl.ID + "〉"; Response.Write(s + "<br/&

ASP.NET 广告控件AdRotator的使用方法与实例_实用技巧

adRotator.aspx,在ASP.NET页面中创建一个AdRotator服务器控件,将广告XML文件连接到这个控件.使用以下服务器控件标记来完成 复制代码 代码如下: <asp:AdRotator ID="AdRotator1" runat="server" AdvertisementFile="~/XMLFile.xml" /> 生成广告的代码 复制代码 代码如下: adRotator.aspx.csusing System;

Asp.net清空控件值的方法(可自定义控件类型)_实用技巧

由于项目收尾,最近忙着做一些方法的优化,整理了一些分享给大家. 当页面内有许多控件,我们在需要清空其值的时候,一个个清空未免太麻烦.于是写了这么一个方法,可以自定义清空控件的类型,灵活应对业务需求. 复制代码 代码如下: /// <summary>重置方法控件类型枚举</summary> /// <remarks>求知域http://www.qqextra.com 2012-12-28</remarks> public enum ReSetType { //

ASP.NET中的Menu控件的应用及XmlDataSource的了解_实用技巧

以前一直以为菜单都是通过sitemap制作的,最近看到项目中的方法是使用XmlDataSource榜定的. Menusite.xlm文件: 复制代码 代码如下: <?xmlversion="1.0"encoding="utf-8"?> <Menusvalue=""> <TopMenuid="100"value=""ImageUrl="~/App_Themes/Publ

分析10个ASP.NET控件最有用的属性详解_实用技巧

1.ClientIDMode 渲染ASP.NET控件时会自动生成一个ID,当我们在客户端脚本中引用它们时,却会制造不少麻烦,虽然它是命名容器和ID的简单串联,但仍然无法预测生成的ID范围. ASP.NET 4.0使用ClientIDMode属性解决了这个问题,它允许你控制生成这些ID的方法,ClientIDMode有四个可选择的值:AutoID,Static,Predictable和Inherit.下面是这四个值的含义解释: AutoID – 和4.0以前的版本保持一致,自动生成ID. Stat