介绍ASP.NET控件ID

开发 后端
本文介绍ASP.NET控件ID,ASP.NET中不要使用动态控件,我想主要的原因在于使用动态控件会带来一些问题,在做项目的过程中,我将由动态加载控件引发的总是作了一个小小的总结.

ASP.NET控件ID

经常见到有人说在ASP.NET中不要使用动态控件,我想主要的原因在于使用动态控件会带来一些问题,在做项目的过程中,我将由动态加载控件引发的总是作了一个小小的总结.

1 、在使用LoadControl加载控件后,用户控件中的某些控件不再响应事件。
这个问题主要是由于将控件加载放在if (!Page.IsPostBack)之内引起的,放在外面即可。在思归的blog上对此问题进行了详细的说明。

2、用户控件中某些控件的响应出现问题,如某个按钮***次选择时不触发CLICK事件,第二次可以了。
这是由于没有给控件设置ID引起的,控件ID的作用在下面详细讲述。 如

  1. Control userControl=(Control)Page.LoadControl(“Test.ascx”);  
  2. userControl.ID=“Test”;  
  3. AddControl(userControl);  

3、如果用户控件中包括DataGrid控件,那么加载控件后可能出现不响应DataGrid事件的问题。
这好像是一个bug,必须要将加载的控件进行强制转换,如:

  1. Test userControl=(Test)Page.LoadControl(“Test.ascx”);  

注意:上面使用的是Test类型,而不是Control!
我在以前的Blog中曾提到过这个问题,这种方式将使系统的扩展性降低。 我有一个解决方案可以和大家讨论(运用策略模式):

  1. public class BaseControl : System.Web.UI.UserControl  
  2. {  
  3. public virtual BaseControl ProcessThisControl();  
  4. }  

所有的用户控件从BaseControl 继承,如果有Datagrid控件,由overide ProcessThisControl方法 ,如:return this as Test

按如下方式加载控件:

  1. BaseControl userControl=(BaseControl )Page.LoadControl(“Test.ascx”);  
  2. userControl.ProcessThisControl();  

4、在用户控件中如何使用JavaScript。
大家都知道,使用客户端的脚本将大大提高页面的响应速度,同时可以避免频繁地刷新页面。所以使用javascript来实现页面中部分控制是一个比较好的方式,但是在用户控件中如果访问某一个子控件呢?

使用方式如下:

  1. document.all.<%= TestControl.ClientID%>.disabled=true;   
  2. //将TestControl设置为不可用  
  3.  
  4. Page.RegisterStartupScript("OnInitControl","<SCRIPT LANGUAGE='JavaScript'>
    document.all.Test_TestControl.disabled=true;</SCRIPT>");   
  5. //Test为用户控件,TestControl为用户控件中的子控件。 

现在说一下ASP.NET控件ID,在访问aspx文件时,IIS会将aspx的脚本进行编译。编译的时候将用户控件中的内容写在同一个页面中,为了防止页面中的控件与用户控件中的控件名称相同,在编译的时候对用户控件中的控件名称修改为 : 用户控件名:子控件 ,ASP.NET控件ID则修改为 用户控件ID_子控件ID。 在动态加载控件时,如果不对控件的ID进行赋值,则ASP.NET控件ID为上一次加载的控件ID,因此在加载用户控件后应该立即对其设置ID.

【编辑推荐】

  1. ASP.NET开发技巧之Theme功能浅析
  2. 详解ASP.NET动态编译
  3. Apache支持ASP.NET方法浅析
  4. 浅谈ASP.NET服务器标准控件
  5. ASP.NET中SQL Server数据库备份恢复浅析
责任编辑:佚名 来源: cnblogs
相关推荐

2009-08-04 15:58:06

ASP.NET动态控件

2011-07-12 15:17:02

ASP.net服务器控件

2009-07-29 17:26:39

ASP.NET页面

2009-07-27 17:00:29

ASP.NET主机

2009-07-20 16:12:21

ASP.NET Fra

2009-07-23 14:17:41

2009-07-29 10:02:49

ASP.NET上传

2009-07-21 10:40:36

ASP.NET Pro

2009-07-29 09:14:36

ASP.NET网站

2009-09-10 14:02:08

LINQ ASP.NE

2009-08-19 09:23:40

ASP.NET Rou

2009-07-22 16:05:34

ASP.NET AJA

2009-07-29 17:23:17

ASP.NET表单

2009-07-27 17:25:53

ASP.NET验证控件

2009-07-27 16:19:59

ASP.NET报表控件

2009-07-27 13:52:36

Panel控件ASP.NET

2009-08-17 09:24:25

ASP.NET控件

2009-08-03 15:08:00

SqlDataSour

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-08-04 10:43:59

ASP.NET控件开发
点赞
收藏

51CTO技术栈公众号