控件的服务端ID和客户端ID

比如一个ID为TextBox1的服务器端控件,在客户端访问该控件的DOM元素时

错误: var txtbox=document.getElementByID("TextBox1");

正确: var txtbox=document.getElementByID('<%=TextBox1.ClientID%>');

原因: 服务器端控件不像客户端控件那样只有一个ID。服务器端控件有三个属性表示控件的唯一名称 : ID UniqueID ClientID。ID表示我们给它命名的ID,而不管在服务端还是在客户端都不会使用这个ID。UniqueID表示服务端ID。ClientID表示客户端ID。从使用角度讲,如果继承了INamingContainer接口,当我们为子控件设定一个ID后,它的UniqueID和ClientID会自动加上父控件的名称和分隔符作为前缀,服务端前缀分隔符为$,客户端前缀符为_。

如果采用前面的错误的写法,某天把TextBox1控件放到母板容器中,TextBox1控件的UniqueID会变为Panel1$TextBox1,其ClientID会变为Panel1_TextBox1,这时当然获取不了。之前没放在容器控件里,TextBox1控件的ID UniqueID ClientID恰巧是一样的。

在ASP.NET服务端控件出现以前,开发人员使用HTML客户端元素标记可以操作的事件非常丰富(accesskey,align,class,dir,disabled,id,lang,language,style,tabindex,title,onactivate,onafterupdate,

onbeforeactivate,onbeforecopy,onbeforecut,onbeforedeactivate,onbeforeeditfocue,onbeforepaste,

onbeforeupdate,onblur,onclick,oncontextmenu,oncontrolselect,oncopy,oncut,ondbclick,ondeactivate,

ondrag,ondragend,ondragenter,ondragleave,ondragover,ondragstart,ondrop,onerrorupdate,

onfilterchange,onfocus,onfocusin,onfocusout,onhelp,onkeydown,onkeypress,onkeyup,

onlayoutcomplete,onlosecapture,onmousedown,onmouseenter,onmouseleave,onmouseout,

onmousemove,onmouseover,onmouseup,onmousewheel,onmove,onmoveend,onmovestart,onpaste,

onpropertychange,onreadystatechange,onresize,onresizeend,onresizestart,onscroll,onselectstart,

ontimeerror)

这些属性和事件除了在HTML元素中使用外

<input type=text onmouseover="this.style.backgroundColor='red';"

onmouseover="this.style.backgroundColor='white';"/>

对于ASP.NET控件也是可以使用的

方法1(照搬法) 像使用HTML客户端元素一样,强制为服务端控件增加客户端属性和事件,如:

<asp:TextBox ID=“TextBox1” runat=“server” onmouseover="this.style.backgroundColor='red';"

onmouseover="this.style.backgroundColor='white';"></asp:TextBox>

但当我们要为位于容器控件内的子控件强制增加客户端属性和事件时是不会成功的。

方法2(使用服务端控件的Attributes属性)

this.TextBox1.Attributes.Add("onmouseover","this.style.backgroundColor='Red';"); 增加一个行为

this.TextBox1.Attributes.Remove("onmouseover");  删除一个行为

this.TextBox1.Attributes["onmouseover"]="this.style.backgroundColor='Red';";

修改一个行为(如果此key对应的值为null则新增一个行为)

对于复杂控件的处理(在此以GridView为例)

Protected void GridView1_RowDataBound(object sender,GridViewRowEventArgs e)

{

if(e.Row.RowType==DataControlRowType.DataRow)

//鼠标移动到每项时产生颜色交替效果

e.Row.Attributes.Add("onmouseover","this.style.backgroundColor='Red';"this.style.Color='Black'");

e.Row.Attributes.Add("onmouseout","this.style.backgroundColor='Black';"this.style.Color='Red'");

//单击 双击 按键事件

e.Row.Attributes.Add("OnClick","ClickEvent('"+e.Row.Cells[1].Text+"')");

e.Row.Attributes.Add("OnDblClick","BbClickEvent('"+e.Row.Cells[1].Text+"')");

e.Row.Attributes.Add("OnKeyDown","GridViewItemKeyDownEvent('"+e.Row.Cells[1].Text+"')");

//设置鼠标指针为小手

e.Row.Cells[1].Attributes["style"]="Cursor:hand";

}

以上对GridView的数据行对象(tr)设置了一些客户端效果,如鼠标进入离开事件单击双击事件按键事件,最后还对每行的第二个单元格(td)设置了小手形状的鼠标样式。

服务器端控件的"客户端"的更多相关文章

  1. Asp.Net 之 服务器端控件与客户端控件的区别

    服务器控件,即Asp.Net的控件,控制这些控件必须经过服务器处理,然后响应用户,代码在服务器端解释执行,生成根据用户的浏览器而定的html元素. 客户端控件,即普通Html控件,使用script控制 ...

  2. C# 服务器端控件

    服务器端控件和客户端控件的比较? 区别:服务器端控件都会有个runat="Server"属性,这样才能够在后台对其进行设置修改,也就是在cs代码里面能对其修改设置.你做下测试 你放 ...

  3. 由Asp.Net客户端控件生成的服务器端控件

    由Asp.Net客户端控件生成的服务器端控件(也就是给客户端控件添加 runnat="server"),这样的控件既能在js中通过id命.类名获取到,也能在服务器端根据id获取到

  4. ASP.NET服务器端控件(class0617)

    ASP.Net服务端基本控件介绍 ASP.Net服务端控件是ASP.Net对HTML的封装,在C#代码中就可以用txt1.Text=‘abc’这种方式来修改input的值,ASP.Net会将服务端控件 ...

  5. ASP.NET服务器端控件原理分析

    服务器端控件触发事件分两种: 1.服务器端控件Button被渲染成客户端的 <input type="submit" name="Button1" val ...

  6. js如何获取asp.net服务器端控件的值(label,textbox,dropdownlist,radiobuttonlist等)

    js如何获取asp.net服务器端控件的值(label,textbox,dropdownlist,radiobuttonlist等) 欢迎访问原稿:http://hi.baidu.com/2wixia ...

  7. Ajax Control Toolkit 34个服务器端控件的使用

    摘自:http://blog.csdn.net/yaoshuyun/article/details/2218633 1. Accordion[功能概述] Accordion可以让你设计多个panel  ...

  8. 服务器端控件同html控件的区别

    ●ASP.NET中共有几种类型的控件? 三种:1-asp.net控件(动态) 2-标准的html控件(静态) 3-标准的html控件加runat="server"属性(动态) 动态 ...

  9. Asp.Net控件的客户端命名

    我们在用ASP.NET写出来的网页,用浏览器来查看生成的客户端代码的时候经常看到这样的代码:GridView1_ctl101_WebUserControl1_webuserControlButton, ...

随机推荐

  1. 可定制的分词库——Yaha(哑哈)分词

    可定制的分词库——Yaha(哑哈)分词在线测试地址:http://yaha.v-find.com/ 部署于GAE yahademo.appspot.comYaha分词主要特点是把分词过程分成了4个阶段 ...

  2. centos6 启动流程

    具体过程:1)加载BIOS的硬件信息,执行BIOS内置程序.2)读取MBR(Master Boot Record)中Boot Loader中的引导信息.3)加载内核Kernel boot到内存中.4) ...

  3. Java探索之旅(12)——equals方法及其覆盖

    1.Object中的equals方法 java中的的基本数据类型:byte,short,char,int,long,float,double,boolean.==比较的是值. ❶作用:对于复合类型来说 ...

  4. 获取服务器IP,客户端IP

    客户端IP相关的变量 1. $_SERVER['REMOTE_ADDR']; 客户端IP,有可能是用户的IP,也有可能是代理的IP. 2. $_SERVER['HTTP_CLIENT_IP']; 代理 ...

  5. [hdu1402]A * B Problem Plus(NTT)

    解题关键:快速数论变换NTT模板. 注意$ans$数组的$ans[n]$一定要注意置$0$,或者结果从$n-1$开始遍历,这里很容易出错. 代码1:ACdreamer 的板子. 为什么要reverse ...

  6. 使用 Node.js 实现简单的 Webhook

    距离 Node.js 这个东西出来已经过了好久了,感觉现在的前端如果不会点 Node.js 就有点太落后于时代啦.我接触它是从去年暑假开始的,当时在写一个比较神奇的东西,就顺便接触了一下.虽然网传 n ...

  7. Linux中Root用户密码变更、密码忘记

    用户设置bash的时候,错把root的bash改为bin/bash,注意,不是“/bin/bash”!. 然后就登录不了root了,也修改不了/etc/passwd了. 解决: 1.重启Ubuntu, ...

  8. hdu1074

    #include <iostream> #include <string> #include <cstring> #include <stack> #i ...

  9. win10外接显示器时有些应用和里面的字体显示比较模糊

    打开系统设置 - 选择显示 - 选中外接的显示器 - 点击 "高级缩放设置" 进去后将 "允许 Windows  尝试修改应用,使其不模糊"打开,然后关闭应用再 ...

  10. THE WAY TO HACKER

    1/编程篇88课时(预计三个月) 此阶段主要侧重于培养学员发现问题的能力,并对各大平台各个操作系统有一个整体性认知,迅速建立起较高的计算机素养,并形成对于信息安全核心思想的初步探索及认知,为后续专项课 ...