服务器端控件的"客户端"
控件的服务端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)设置了小手形状的鼠标样式。
服务器端控件的"客户端"的更多相关文章
- Asp.Net 之 服务器端控件与客户端控件的区别
服务器控件,即Asp.Net的控件,控制这些控件必须经过服务器处理,然后响应用户,代码在服务器端解释执行,生成根据用户的浏览器而定的html元素. 客户端控件,即普通Html控件,使用script控制 ...
- C# 服务器端控件
服务器端控件和客户端控件的比较? 区别:服务器端控件都会有个runat="Server"属性,这样才能够在后台对其进行设置修改,也就是在cs代码里面能对其修改设置.你做下测试 你放 ...
- 由Asp.Net客户端控件生成的服务器端控件
由Asp.Net客户端控件生成的服务器端控件(也就是给客户端控件添加 runnat="server"),这样的控件既能在js中通过id命.类名获取到,也能在服务器端根据id获取到
- ASP.NET服务器端控件(class0617)
ASP.Net服务端基本控件介绍 ASP.Net服务端控件是ASP.Net对HTML的封装,在C#代码中就可以用txt1.Text=‘abc’这种方式来修改input的值,ASP.Net会将服务端控件 ...
- ASP.NET服务器端控件原理分析
服务器端控件触发事件分两种: 1.服务器端控件Button被渲染成客户端的 <input type="submit" name="Button1" val ...
- js如何获取asp.net服务器端控件的值(label,textbox,dropdownlist,radiobuttonlist等)
js如何获取asp.net服务器端控件的值(label,textbox,dropdownlist,radiobuttonlist等) 欢迎访问原稿:http://hi.baidu.com/2wixia ...
- Ajax Control Toolkit 34个服务器端控件的使用
摘自:http://blog.csdn.net/yaoshuyun/article/details/2218633 1. Accordion[功能概述] Accordion可以让你设计多个panel ...
- 服务器端控件同html控件的区别
●ASP.NET中共有几种类型的控件? 三种:1-asp.net控件(动态) 2-标准的html控件(静态) 3-标准的html控件加runat="server"属性(动态) 动态 ...
- Asp.Net控件的客户端命名
我们在用ASP.NET写出来的网页,用浏览器来查看生成的客户端代码的时候经常看到这样的代码:GridView1_ctl101_WebUserControl1_webuserControlButton, ...
随机推荐
- python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)
把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...
- 问题:C# Dictionary嵌套使用;结果:嵌套Dictionary添加 , C#2.0泛型详细介绍
Dictionary<int, Dictionary<string, string>> dict1 = new Dictionary<int, Dictionary< ...
- CSDN优秀博客连接,博客之星连接。
点击链接 获得[红杏出墙]插件,FQ上网无压力!谷歌搜索无压力! 2013年度CSDN十大博客之星 TOP 作者 专注领域 博客地址 邹晓艺 机器学习及算法 zouxy09 2 王然 潜在的集大成者 ...
- ObjectInputStream缓存数据
DataManager /** * 本地数据的存储 * @author Administrator * */ public class DataManager { private static fin ...
- Java堆分析
- Entity Framework Code-First(9.2):DataAnnotations - TimeStamp Attribute
DataAnnotations - TimeStamp Attribute: TimeStamp attribute can be applied to only one byte array pro ...
- 5.6 安装Virtual box
本以为安装虚拟机很复杂的样子,经过kevin一指点,发现soeasy.废话少说,直接上图片: 将安装包放到自己的目录下: 安装完后,可以在搜索框中搜索:virtual 会出现安装好的虚拟机盒子.
- Flask 入门(第三篇)
1. 安装虚拟环境 安装虚拟环境: $ sudo pip install virtualenv $ sudo pip install virtualenvwrapper virtualenv --ve ...
- MySQL主从配置实战笔记
其实网上已经有关于MySQL主从复制的很丰富全面的资料了,这里写点东西主要是为了给自己加深印象. 复制原理 MySQL主从复制是内建的非常强大的功能,主要应用于数据备份,负载均衡等方面.因为配置相对比 ...
- AT2166 Rotate 3x3
传送门 这个题网上有两种做法,一种是树状数组的,还有一种是暴力模拟的,暴力模拟显然不够优美,所以我用的树状数组 显然可以从初状态推到目标状态,我们也可以考虑倒推回去 首先可以容易发现每列的数字是不变的 ...