经常见到有人说在ASP.net中不要使用动态控件,我想主要的原因在于使用动态控件会带来一些问题,在做项目的过程中,我将由动态加载控件引发的总是作了一个小小的总结.
1 、在使用LoadControl加载控件后,用户控件中的某些控件不再响应事件。
这个问题主要是由于将控件加载放在if (!Page.IsPostBack)之内引起的,放在外面即可。在
思归的blog上对此问题进行了详细的说明。
2、用户控件中某些控件的响应出现问题,如某个按钮第一次选择时不触发CLICK事件,第二次可以了。
这是由于没有给控件设置ID引起的,控件ID的作用在下面详细讲述。 如
Control userControl=(Control)Page.LoadControl(“Test.ascx”);
userControl.ID=“Test”;
AddControl(userControl);
3、如果用户控件中包括DataGrid控件,那么加载控件后可能出现不响应DataGrid事件的问题。
这好像是一个bug,必须要将加载的控件进行强制转换,如:
Test userControl=(Test)Page.LoadControl(“Test.ascx”);
注意:上面使用的是Test类型,而不是Control!
我在
以前的Blog中曾提到过这个问题,这种方式将使系统的扩展性降低。 我有一个解决方案可以和大家讨论(运用策略模式):
public class BaseControl : System.Web.UI.UserControl
{
public virtualBaseControl ProcessThisControl();
}
所有的用户控件从BaseControl继承,如果有Datagrid控件,由overide ProcessThisControl方法 ,如:
return this as Test;
按如下方式加载控件:
BaseControl userControl=(BaseControl )Page.LoadControl(“Test.ascx”);
userControl.ProcessThisControl();
4、在用户控件中如何使用JavaScript。
大家都知道,使用客户端的脚本将大大提高页面的响应速度,同时可以避免频繁地刷新页面。所以使用javascript来实现页面中部分控制是一个比较好的方式,但是在用户控件中如果访问某一个子控件呢?
使用方式如下: document.all.<%= TestControl.ClientID%><!--lstUser.ClientI-->.disabled=true; //将TestControl设置为不可用
如果在C#脚本中应该这样写:Page.RegisterStartupScript("OnInitControl","<SCRIPT LANGUAGE='JavaScript'>document.all.Test_TestControl.disabled=true;</SCRIPT>"); //Test为用户控件,TestControl为用户控件中的子控件。
现在说一下控件ID,在访问aspx文件时,IIS会将aspx的脚本进行编译。编译的时候将用户控件中的内容写在同一个页面中,为了防止页面中的控件与用户控件中的控件名称相同,在编译的时候对用户控件中的控件名称修改为 : 用户控件名:子控件 ,控件ID则修改为 用户控件ID_子控件ID。 在动态加载控件时,如果不对控件的ID进行赋值,则控件ID为上一次加载的控件ID,因此在加载用户控件后应该立即对其设置ID。
分享到:
相关推荐
asp.net实现动态添加控件并添加事件实例的源程序
VS.net 2008 asp.net 动态 添加 删除 控件
【ASP.NET编程知识】ASP.NET动态添加用户控件的方法.docx
asp.net 动态添加控件,C# 代码。动态添加控制的一个小实例。希望对大家有用。。。
ASP.NET FreeTextBox 文本编辑控件,编辑控件类似于office软件,内又强大的编辑功能,能让你更好的在网页上编辑文本
asp.net 动态生成控件(在数据库提取数据)或直接动态生成,及其自动生成控件的取值
ASP.NET c# 日期控件,很好用,测试通过 下载后解压放到站点文件夹下,引用时注意路径 前台: <title></title> <script language="javascript" type="text/javascript" src="../My97DatePicker/WdatePicker.js">...
Asp.net动态加载控件的示例源码,仅供参考。
动态添加控件 动态添加控件 动态添加控件
asp.net中的FileUpload控件一次只能实现上传一个文件,若要上传多个文件的话必须使用多个FileUpload控件,但一次上传多少个文件有时不确定,所以就想到了动态创建控件。此处是用下拉列表控件的postback控制的,要想...
ASP.NET中dropdownlist和GridView控件的用法,简单易学,一看就懂.
主要实现客户端页面上的控件动态生成。实现无限添加。
asp.net第三方控件AspNetPager分页控件
主要介绍了asp.net动态加载自定义控件的方法,涉及asp.net动态加载控件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
实例 动态添加、删除DropDownList控件选项 4.5 单选按钮的应用 实例 性别选择 实例 网络考试系统中单选题答案的选择 4.6 复选框的应用 实例 登录身份选择 实例 网络考试系统中多选题答案的选择 4.7 控件连接数据源 ...
经过对ASP.NET中Repeater数据控件基本特征的分析,以及对实际应用系统中数据列表功能的提炼总结,提出并设计了挖掘其潜力的示例算法模型,重点介绍了控件模板的灵活性与定制使用方法。并通过典型应用示例,展示其...
ASP.NET 服务器控件:DropDownCheckBoxList ,支持下拉多选,支持.NET3.5 支持主流浏览器IE8及以上版本 FF3.5+,Chrome 9+,Safari 5 等浏览器。
ASP.NET 自定义菜单MENU控件,直接添加引用DLL,即可使用,美观,自定义菜单样式图片,也可以替换,随意使用,附件是调用的DEMO,分享给大家。
在asp.net(C#)中TreeView控件的数据绑定,本例子绑定是目录结构(即是文件夹),按目录等级来分层绑定的,用于目录管理,可自己添加功能代码实现指定文件夹的新建、名称修改,以及文档的上传、转移及各种管理。
asp.net树形控件,可以添加删除修改