介绍ASP.NET控件ID
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相关推荐
- ASP.NET控件集合
文章目录 前言 一.控件分类 1.HTML控件 2.HTML服务器控件 3.ASP.NET服务器控件 4.用户控件和自定义控件 二.HTML控件和ASP.NET服务器控件 1.HTML控件 2.ASP ...
- asp.net 控件的 ID ,ClientID ,UniqueID 区别
对于每一个服务器控件System.Web.UI.Control 都具有 ID,UniqueID,ClientID 三个属性,那么这个三者到底有河关系,在客户端HTML中又是如何对应呈现的呢? ID:获 ...
- 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图
Nikhil Kothari Microsoft Corporation 2000年8月 简介 Microsoft® Visual Studio.NET 的下一发行版包括 DataGrid Web 控 ...
- ASP.NET--Menu控件
http://www.meituan.com/r/i13110281 Menu控件提供静态和动态混合的菜单功能.在向页面添加这个控件的时候,开发人员可以选择将它设置为一个完全动态的菜单,以便整个站点的 ...
- 一起谈.NET技术,asp.net控件开发基础(20)
上面我们讨论了数据绑定控件的做法,但都未涉及到asp.net2.0中数据源控件的用法,让用惯了数据源控件的人可能感觉不适应.这次我们就开始讨论在asp.net2.0中,我们该如何重新定义数据绑定控件. ...
- Silverlight 3.0 不再包含 asp:silverlight 控件
从 Silverlight 2 升级到 Silverlight 3 可能会报如下错误,程序中可能引用了 asp:silverlight 控件: Could not load file or assem ...
- asp.net控件本质
.net控件本质 在我的一个项目中需要对于控件进行区分总结,我在网上找了找加上自己的实际测试总结如下:(如果有什么不正确的请即使指出,一起讨论,大家共同进步) asp.net之所以现在 ...
- Asp.net控件之异同:HTML控件与Web服务器控件
Asp.net之所以现在开发方便和快捷,关键是它有一组强大的控件库,包括web服务器控件,web用户控件,web自定义控件,html服务器控件和html控件等.这里我主要说说html控件.html服务 ...
- [ASP.NET 控件实作 Day12] 继承 TBActiveX 重新改写 TBMediaPlayer 控件
上篇介绍的 TBActiveX 控件,它可以支持网页 Media Player 的设定,这跟前面提及的 TBMediaPlayer 功能相同.TBActiveX 具有网页设定 ActiveX 通用属性 ...
最新文章
- CVE-2012-1876 Internet Exporter堆溢出漏洞分析
- “猜你喜欢” — 浅谈内容分发中的推荐系统
- 身份令牌toKen Vuex + localStorage结合存储
- centos7.0利用yum快速安装mysql8.0
- Stream学习过程中遇到的一个问题记录
- oracle pl sql developer 教程,plsql developer怎么使用 plsql developer图文使用教程
- 【华为云技术分享】盘点物联网常用开发板
- union的限制, 临时表大小的优化
- CAS总结之Ticket篇
- jQuery之事件移除
- RxJS 系列之二 - Observable 详解
- 联想微型计算机Q150,联想Q150E电脑安装攻略
- Oracle 11.2.0.4 RAC 最新补丁下载(11.2.0.4.200714)
- 鸿蒙系统可以上外网吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- tomcat乱码_中文乱码
- java中包、不同包下类之间的访问以及编译和运行示例
- isNaN()和isFinite()的应用
- C# WAV音乐多音轨合并
- jquery开发知识总结2
- 福施福、爱乐维、玛特纳各成分比较(已换算成同一单位)
热门文章
- QT的QLayer类的使用
- 如何找到设备的guid_如何禁止win10自动更新显卡驱动
- 上海浦东新区计算机学校排名2015,2015年上海市浦东新区初级中学最新排名
- 有关linux下redis overcommit_memory的问题,以及导致的:Cannot allocate memory问题
- ack机制之代码实现,实现BaseRichBolt的方式,使用BaseBasicBolt的方式实现BaseRichBolt发ack和fail的功能
- ibatis中多表联接查询
- c#设置图片的dpi_被忽视的鼠标设置,影响瞄准的关键因素就是它!
- Python-opencv在线帮助
- SVN:多版本库环境的搭建
- puppet 基础篇