漫话ID(中)——UniqueID和ClientID

在上一篇漫话ID(上)——Name和ID的种种中,我介绍了关于name和id的一些问题,在这片文章中, 我们把目光放到ID上来,这篇主要关注自定义控件和repeater等控件中碰到的UniqueID和ClientID。同时 ,在文末还是依照老习惯,给出一个便于大家理解的例子,而不仅仅是纸上谈兵。

在ASP.NET 的服务器端控件中有三种关于ID 的属性,即 ID, ClientID 和 UniqueID。ID 表示控件的 服务器端编程的标识符,我们写服务器端的代码,就要用到这个 ID, 通过这个 ID 可以在服务器端对服 务器端控件的属性、方法和时间进行编程访问。ClientID 表示由服务器端生成的客户端控件的ID,  经 常用于在客户端脚本中访问服务器控件所呈现的 HTML 元素。一般情况下与服务器端的 ID 相同,有时, 不能为控件生成唯一的名称,例如,如果 Repeater 空间在它的某个模板中包含一个 Label 控件,则将 在客户端生成多个该 Lable 的 HTML 元素, 为防止命名冲突,ASP.NET 为各个服务器控件生成一个唯一 的 ClientID ,ClientID 通过将子控件的父控件的 UniqueID 值与控件的 ID 值连接生成,各个部分之间 以下划线 _ 连接。UniqueID 用于获取服务器控件的唯一的、以分层方式表示的标识符。当将控件放置到 重复控件(Repeater、DataList和DataGrid)中时,将可能生成多个服务器端的控件,这就需要区分服务 器端的各个控件,以使它们的 ID 属性不冲突。UniqueID 通过将子控件的父控件的 UniqueID 值与控件 的 ID 值连接生成,各个部分之间以 IdSeparator 属性指定的字符连接。默认情况下, IdSeparator 属 性为冒号字符 (:)。

例如,创建以下 ASP.NET 服务器控件:

<asp:textbox id="TextBox1" runat="server" text="Sample Text" />

ClientID 属性被设置为 TextBox1,在基于 HTML 的浏览器中,其结果元素与以下所示类似:

<input name="TextBox1" type="text" value="Sample Text" id="Text1" />

可以使用这些属性在客户端脚本中引用服务器控件。通常,必须在客户端脚本中用完全限定引用来引 用控件;如果控件是页面中 form 元素的子控件,则一般使用document.forms[0].TextBox1.value = "New value"在客户端脚本中引用控件。有些控件将子控件呈现在页面中。这些控件中包括数据列表控件 (如 GridView、DetailsView、FormView、DataList 和 Repeater 控件)、用户控件和 Web 部件控件。

例1:

在页面中加入一个DataGrid控件,然后在该控件中加入Button子控件。

前台代码:

<asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="false">

后台代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ArrayList list = new ArrayList();
            list.Add(1);
            list.Add(2);
            DataGrid1.DataSource = list;
            DataGrid1.DataBind();
        }
}

时间: 2024-08-01 07:57:25

漫话ID(中)——UniqueID和ClientID的相关文章

漫话ID(下)——“自定义ID”以帮助定位自定义控件(实例和应用)

在前面的两篇文章<漫话ID(上)--Name和ID的种种> 和<漫话ID(中)--UniqueID和ClientID>中,我们讨论了关于ID的一些内容.在这一篇中,我想讨论一下关于"自定义ID"的话题. 这个所谓的"自定义ID"跟前面提到的name,ID,UniqueID,ClientID没多大关系,但是借用了id的特质--我们可以为控件添加一个自定义属性,暂时称之为testid,然后将id的值赋给testid.这可以应用于自定义控件较多的情

UniqueID和ClientID的来源

在<漫话ID>一文中,作者提出了一个问题:为什么在ItemCreated事件中访问ClientID会导致MyButton无法响应事件,事实上 MyButton无法响应事件是因为他在客户端的ID被改变了,而此文从UniqueID和ClientID入手,进行较为深入的探讨,展示 UniqueID和ClientID是如何生成的,在何时生成,并同时解答<漫话ID>一文中作者的疑问. 为什么有UniqueID和ClientID 这个我想多数使用WebForm的人已经知道了,很大原因上是因为W

JQuery对id中含有特殊字符的转义处理示例_jquery

有时在处理html时, 为了和php结合的方便, 会利用数组a[]这里的id,或者id中包含其他特殊字符比如 /@ 等 为了利用jquery获取该元素, 需要转义特殊字符 直接上例子 复制代码 代码如下: <div id="a[]">kkkkkk</div> <script type="text/javascript"> //方法1 $(document.getElementById('a[]')); //方法2 $('#a\\[

漫话ID(上)——Name和ID的种种

页面元素中的ID这东西想必很多人都用过,在JavaScript函数中也经常要用到 document.getElementById()这个方法来定位一个元素并操作它.在Web自动化测试中,我们也经常用到元 素的id来定位元素,这样看起来id是个好玩意儿. 在之前的一篇文章Selenium IDE实践中,Selenium录制的脚本中有下面这一段代码: [Test] public void TheNewTest() { selenium.Open("http://www.google.cn/"

javascript 获取所有id中包含某关键字的控件的实现代码_javascript技巧

//获取某容器控件中id包含某字符串的控件id列表 //参数:容器控件.要查找的控件的id关键字.要查找的控件的标签名称 //返回值:查找到的控件id列表字符串,以逗号分割. 复制代码 代码如下: function GetIdListBySubKey(container,subKey,TagName) { var idList = ""; for(var i = 0; i < container.childNodes.length;i++) { if(container.chil

JavaScript遍历查询指定id中的html元素

提示:您可以先修改部分代码再运行 HTML写内容 CSS控制外观 JavaScript控制行为 给所有的li元素添加鼠标事件 提示:您可以先修改部分代码再运行

window.location.reload 刷新使用分析(去对话框)_基础知识

使用window.location.reload;刷新时,如果提交数据的动作,则会出现讨厌的对话框! 解决此问题,应该这样写: window.location.href=window.location.href; window.location.reload; 同理,如果是刷新父窗口,应该这样写: window.opener.location.href=window.opener.location.href; window.opener.location.reload(); 这种写法就不出现那讨

asp.net的js中获取控件的ClientID

                        <tr>                         <td width="110" height="35" align="center" style="font-weight: bolder">                             出生年月                         </td>          

datalist 中javascript如何能设置控件的ID号?

问题描述 我在DATALIST的一个模板里有一个TEXTBOX和一个图片点击图片后会出来一个软键盘将值输入到TEXTBOX中<imgsrc="images/keyboard.gif"OnClick="password1=tbSl;showkeyboard();"/>tbSl是TEXTBOX的ID.不过DATALIST中动态生成了ID.所以在页面中不知道要怎么写了5555~ 解决方案 解决方案二:可以在itemdatabound中得到动态的控件client