当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > Asp.Net中页面运行时动态载入的UserControl内元素的事

ASP.NET
漫谈.Net开发关于命名空间和目录划分
.net中关于企业Excel报表的生成
.NET中取得IP/用户名等信息常用方法
关于.Net开发下的分布式缓存设计
.NET中为组合框添加自动查询功能
ASP.NET如何进行性能优化问题
开发中如何有效监控.NET应用程序
ASP.NET2.0 显示写入日期和时间语法
用.NET Array类的Sort方法分类数值
Asp.net Mvc Pv4中使用AjaxHelper
Asp.net中Forms验证的角色验证授权(一)
Asp.net中Forms验证的角色验证授权(二)
Asp.Net2.0数据库基本操作方法学习
Asp.Net之枚举类型输出需要类型转换
用.NET的File控件上传文件的解决方案
.NET泛型技巧之类型参数之间的转换
在ASP.NET中将数据直接输出成Excel格式
在.NET框架下使用自定义配置设置
跟ASP.NET MVC一起使用jQuery
Visual Basic中文本框处理技巧集萃

ASP.NET 中的 Asp.Net中页面运行时动态载入的UserControl内元素的事


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 141 ::
收藏到网摘: n/a

在Asp.Net页面的开发过程中,我们肯定经常会用到自定义的UserControl来复用部分页面元素,我们有两种使用UserControl的方式

1、在设计时往页面里添加需要的UserControl(最常用的就是从SolutionExplorer拖ascx到设计页面)

此种情况下,如果将UserControl放置在runat=server的html标签中,将可能导致UserControl内的元素事件处理不能正确执行。
例如:我们有时用一个div作为边框包含了需要的UserControl,而出于在运行时控制div的显示效果(比如运行时隐藏/显示这个div)的目的,可能将该div设为runat=server,此时,往往包含于div的UserControl内的元素事件触发可能被忽略,UserControl内的事件处理函数往往是不能正常运行的。

2、在运行时使用LoadControl函数动态载入UserControl,再Add到指定的位置

在动态载入的情况下,除了以上的问题同样存在之外,还会带来相应的初始化时的问题,这时,为了保证你的UserControl以你希望的语义正常运行,必须注意两点:

1)如果在LoadControl该UserControl的同时需要调用UserControl的某个初始化函数的话,该初始化函数的调用必须在将该ctlAdd到指定的页面某元素的Controls中之后进行,即必须按如下顺序:
...
MyCtl ctl = (MyCtl)LoadControl("path");
this.someCtl.Controls.Add(ctl);
ctl.InitMethod();//本语句必须在上一条之后,否则ctl中的事件导致PostBack后,需要保持的textbox、listbox等的数据将丢失,导致各种错误

2)如果在LoadControl该UserControl的同时需要调用UserControl的某个初始化函数的话,该函数体内要注意对不需每次执行的代码放入if (!IsPostBack){}语句块中,否则会导致每次提交时被重复运行,这和Page_Load中的处理方法其实是一样的,但往往容易被忽略。


对于动态载入的UserControl还要保证每次PostBack时都重新Load所有的UserControl(但PostBack时可以不初始化UserControl内的元素的初始值),否则事件处理函数会找不到对应的触发源,保存于ViewState的数据也将因找不到对应元素而保持不了。