ASP.NET控件ID

经常见到有人说在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 virtual BaseControl 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%>.disabled=true;   //将TestControl设置为不可用   Page.RegisterStartupScript("OnInitControl","<SCRIPT LANGUAGE='JavaScript'>document.all.Test_TestControl.disabled=true;</SCRIPT>");   //Test为用户控件,TestControl为用户控件中的子控件。

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

介绍ASP.NET控件ID相关推荐

  1. ASP.NET控件集合

    文章目录 前言 一.控件分类 1.HTML控件 2.HTML服务器控件 3.ASP.NET服务器控件 4.用户控件和自定义控件 二.HTML控件和ASP.NET服务器控件 1.HTML控件 2.ASP ...

  2. asp.net 控件的 ID ,ClientID ,UniqueID 区别

    对于每一个服务器控件System.Web.UI.Control 都具有 ID,UniqueID,ClientID 三个属性,那么这个三者到底有河关系,在客户端HTML中又是如何对应呈现的呢? ID:获 ...

  3. 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图

    Nikhil Kothari Microsoft Corporation 2000年8月 简介 Microsoft® Visual Studio.NET 的下一发行版包括 DataGrid Web 控 ...

  4. ASP.NET--Menu控件

    http://www.meituan.com/r/i13110281 Menu控件提供静态和动态混合的菜单功能.在向页面添加这个控件的时候,开发人员可以选择将它设置为一个完全动态的菜单,以便整个站点的 ...

  5. 一起谈.NET技术,asp.net控件开发基础(20)

    上面我们讨论了数据绑定控件的做法,但都未涉及到asp.net2.0中数据源控件的用法,让用惯了数据源控件的人可能感觉不适应.这次我们就开始讨论在asp.net2.0中,我们该如何重新定义数据绑定控件. ...

  6. Silverlight 3.0 不再包含 asp:silverlight 控件

    从 Silverlight 2 升级到 Silverlight 3 可能会报如下错误,程序中可能引用了 asp:silverlight 控件: Could not load file or assem ...

  7. asp.net控件本质

    .net控件本质 在我的一个项目中需要对于控件进行区分总结,我在网上找了找加上自己的实际测试总结如下:(如果有什么不正确的请即使指出,一起讨论,大家共同进步)         asp.net之所以现在 ...

  8. Asp.net控件之异同:HTML控件与Web服务器控件

    Asp.net之所以现在开发方便和快捷,关键是它有一组强大的控件库,包括web服务器控件,web用户控件,web自定义控件,html服务器控件和html控件等.这里我主要说说html控件.html服务 ...

  9. [ASP.NET 控件实作 Day12] 继承 TBActiveX 重新改写 TBMediaPlayer 控件

    上篇介绍的 TBActiveX 控件,它可以支持网页 Media Player 的设定,这跟前面提及的 TBMediaPlayer 功能相同.TBActiveX 具有网页设定 ActiveX 通用属性 ...

最新文章

  1. CVE-2012-1876 Internet Exporter堆溢出漏洞分析
  2. “猜你喜欢” — 浅谈内容分发中的推荐系统
  3. 身份令牌toKen Vuex + localStorage结合存储
  4. centos7.0利用yum快速安装mysql8.0
  5. Stream学习过程中遇到的一个问题记录
  6. oracle pl sql developer 教程,plsql developer怎么使用 plsql developer图文使用教程
  7. 【华为云技术分享】盘点物联网常用开发板
  8. union的限制, 临时表大小的优化
  9. CAS总结之Ticket篇
  10. jQuery之事件移除
  11. RxJS 系列之二 - Observable 详解
  12. 联想微型计算机Q150,联想Q150E电脑安装攻略
  13. Oracle 11.2.0.4 RAC 最新补丁下载(11.2.0.4.200714)
  14. 鸿蒙系统可以上外网吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  15. tomcat乱码_中文乱码
  16. java中包、不同包下类之间的访问以及编译和运行示例
  17. isNaN()和isFinite()的应用
  18. C# WAV音乐多音轨合并
  19. jquery开发知识总结2
  20. 福施福、爱乐维、玛特纳各成分比较(已换算成同一单位)

热门文章

  1. QT的QLayer类的使用
  2. 如何找到设备的guid_如何禁止win10自动更新显卡驱动
  3. 上海浦东新区计算机学校排名2015,2015年上海市浦东新区初级中学最新排名
  4. 有关linux下redis overcommit_memory的问题,以及导致的:Cannot allocate memory问题
  5. ack机制之代码实现,实现BaseRichBolt的方式,使用BaseBasicBolt的方式实现BaseRichBolt发ack和fail的功能
  6. ibatis中多表联接查询
  7. c#设置图片的dpi_被忽视的鼠标设置,影响瞄准的关键因素就是它!
  8. Python-opencv在线帮助
  9. SVN:多版本库环境的搭建
  10. puppet 基础篇