/--------------------------利用计数器实现动态button的累加---------------------------------/
在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Idea,如果有的话就是我的大幸了,呵呵!
要求:页面上有一个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' />");
- 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;
- };
- }
==========================动态添加事件===================================
实现的功能是在网页上的Panel中动态添加一个Button,并为这个Button写一个单击事件。
动态添加控件的事件,语句:
- Control.Command += new CommandEventHandler(this.EventFun);
具体的代码请看下面:
需要特别注意的是:
添加控件和给控件加事件时绝对不能放到 if(!IsPostback){}里面,那样的话,点击一次后控件会消失,而且事件也不
会执行。
- protected void Page_Load(object sender, EventArgs e)
- {
-
- Control c = ParseControl("<asp:Button Text =& nbsp;'按我' ID = 'myButton' commandargument =& nbsp;'b' runat = 'server' />");
-
-
- this.Panel1.Controls.Add(c);
-
-
- Button Button = (Button)Page.FindControl("myButton");
-
-
- Button.Command += new CommandEventHandler(this.On_Button);
-
- }
-
-
- protected void On_Button(Object sender,CommandEventArgs e)
- {
- Response.Write("<mce:script language = 'javascript' type =
'text/javascript'><!--
- alert('" + e.CommandArgument.ToString() + "');
-
- }
-----------------------------------------asp.net为控件动态添加事件----------------------------------------------------
实现的功能是在网页上的Panel中动态添加一个Button,并为这个Button写一个单击事件。
动态添加控件的事件,语句:
- Control.Command += new CommandEventHandler(this.EventFun);
具体的代码请看下面:
需要特别注意的是:
添加控件和给控件加事件时绝对不能放到 if(!IsPostback){}里面,那样的话,点击一次后控件会消失,而且事件也不
会执行。
- protected void Page_Load(object sender, EventArgs e)
- {
-
- Control c = ParseControl("<asp:Button Text =& nbsp;'按我' ID = 'myButton' commandargument =& nbsp;'b' runat = 'server' />");
-
-
- this.Panel1.Controls.Add(c);
-
-
- Button Button = (Button)Page.FindControl("myButton");
-
-
- Button.Command += new CommandEventHandler(this.On_Button);
-
- }
-
-
- protected void On_Button(Object sender,CommandEventArgs e)
- {
- Response.Write("<mce:script language = 'javascript' type =
'text/javascript'><!--
- 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();
- 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();
- BoundColumn s1 = new BoundColumn();
- s1.DataField = "first";
- s1.HeaderText = "mzi";
- dg1.Columns.Add(s1);
- dg1.BackColor = "#00000";
- dg1.CellPadding=3;
-
- panel1.Controls.Add(dg1);
<三> 给动态添加的控件添加事件:
如:给button 添加事件
-
- Button bt1 = new Button();
- bt1.CommandArgument = "bt1";
- bt1.Text = "daji";
- bt1.Command += new CommandEventHandler(this.onbutton);
- ph1.Controls.Add(bt1);
-
- Control cs = ParseControl("<asp:Button ID='Button2' runat='server' Text=Button' commandname='btn' CommandArgument = 'bt2'/>");
- ph1.Controls.Add(cs);
- Button bt2 = (Button)Page.FindControl("button2");
- bt2.Command += new CommandEventHandler(this.onbutton);
- }
- 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.Text = txt[m];
- td1.Controls.Add(lb1);
- HtmlTableCell td2 = new HtmlTableCell();
- TextBox txt1 = new TextBox();
- txt1.Text = namevalue[m];
- txt1.ID = "t" + m;
- td2.Controls.Add(txt1);列中添加txt1
- tr1.Cells.Add(td1);
- tr1.Cells.Add(td2);
- 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中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Idea,如果有的话就是我的大幸了,呵呵!
主要实现客户端页面上的控件动态生成。实现无限添加。
而在asp.net 2.0中,为了方便进行页面导航,新增了一个叫做页面导航控件sitemapdatasource,sitemapdatasource中还可以绑定到不同的其他页面控件,比如treeview,menu等,十分灵活,使到能很方便地实现页面导航的不同...
Asp.net页面内传参数方法 调用存储过程(两种方法比较) 调用存储过程通用类DBHelper 加密解密 SQL常用DBHelper Asp.net存储过程无限分类 TreeView无限分类 无限分类MVC 荧光棒效果获取控件上全选 ...
一:在页面前台中添加注册控件 代码如下: <%@ Register Src=”~/Controls/IndexTop.ascx” TagName... 您可能感兴趣的文章:ASP.NET笔记之页面跳转、调试、form表单、viewstate、cookie的使用说明ASP.net实现页面
第一部分 构建ASP.NET页面 第1章 ASP.NET Framework概览 2 1.1 ASP.NET和.NET Framework 5 1.1.1 框架类库 5 1.1.2 公共语言运行库 9 1.2 ASP.NET控件 10 1.2.1 ASP.NET控件概览 11 1.2.2 HTML控件 12 1.2.3 理解...
ASP.NET相册控件(含源码) PhotoAlbum 功能列表: 1.无须数据库支持,直接处理服务器图片目录 2.为大图片生成缩略图,并存放到专门的目录,提高相册预览图片的效率 3.简化图片添加过程,直接上传图片到图片目录...
为了让用户控件能ASP.NET页面实现动态添加,首先写一个接口IGetUCable,这个接口有一个函数,返回对象类型是UserControl. using System; using System.Collections.Generic; using System.Linq; using System.Web; ...
6.7 对动态添加控件的视图状态分析 228 6.8 自定义类型转换器实现高效率序列化 231 6.9 页面状态性能优化策略 238 6.9.1 存储位置优化——把视图状态信息保存在服务端而非客户端 238 6.9.2 体积优化——压缩视图...
ASP.NET页面间数据传递小结.doc ASPNETXML深入编程.pdf C Primer Plus 5th.chm C#中结构与类的区别.doc C#复习.txt C#实现Web文件上传的两种方法.doc C#排序算法大全.txt C#编程规范.doc C#语言参考.doc ...
第一部分 构建asp.net页面 第1章 asp.net framework概览2 1.1 asp.net和.net framework5 1.1.1 框架类库5 1.1.2 公共语言运行库10 1.2 asp.net控件11 1.2.1 asp.net控件概览11 1.2.2 html控件12 1.2.3 理解和处理...
《Dreamweaver+ASP.NET动态网站设计与典型实例》配书光盘说明 配书光盘 版权所有,侵权必究 2007年10月 一、光盘内容: 1. Readme.txt 光盘说明文件,在使用前请先读光盘的Readme.txt文件。 2.目录内容: ...
Asp.net页面内传参数方法 调用存储过程(两种方法比较) 调用存储过程通用类DBHelper 加密解密 SQL常用DBHelper Asp.net存储过程无限分类 TreeView无限分类 无限分类MVC 荧光棒效果 获取...
最近好几个项目都用到日历选择,而考虑到页面刷新,多个控件页面传值等问题,决定自己写个建议又实用的弹出式日历选择控件以备调用。
第1章 ASP.NET概述 1.1 .NET框架 1.1.1 .NET的设计目标 1.1.2 .NET框架的基本组成 1.2 ASP.NET简介 1.2.1 ASP.NET发展历史 1.2.2 ASP.NET技术背景 1.2.3 ASP.NET 运行机制 1.2.4 ASP.NET的脚本语言 1.2.5 ASP.NET与...
它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中...
在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中...
非常简单 只要打开.NET 然后再工具箱内右键--》选择项--》浏览--》找到这里bin目录下的ZYDF.IMGCODE.dll...添加进工具箱后,直接拉到页面里就可以用了。 去的验证码的值this.IMGCODE1.Text 采用的是ajax无刷新技术。