C#/.net里客户端控件如何控制/引用服务器端控件

来源:百度文库 编辑:神马文学网 时间:2024/03/28 22:27:08

        页面中有一个ID为TextBox1的服务端控件,很多开发人员在客户端访问该控件的DOM元素时,用如下语句:

        var txtbox = document.getElementByID("TextBox1");


        之后有一天,突然发现代码出问题了,通过以上代码再不能够检索到TextBox1控件的客户端元素了。对服务端控件来说这种写法是错误的,正确写法是:


        var txtbox = document.getElementById('<%= TextBox1.ClientID %>');


        出错原因是没有理解服务端控件不像客户端控件只有一个ID。服务端控件有三个属性标志控件的唯一名称,这三个属性是:ID,UniqueID和ClientID。其中ID表示我们给它命名的ID,不管在服务端还是客户端程序中都不会使用这个ID;UniqueID表示控件的服务端ID,在服务端标志控件的唯一名称;ClientID表示控件的客户端ID,在客户端标记页面中元素唯一名称。从使用角度讲,如果继承了INamingContainer接口,当我们为子控件设定一个ID后,它的UniqueID和ClientID会自动加上父控件名称和分隔符作为前缀。一般来说,在服务端分隔符默认使用“$”进行分隔(UniqueID),但是到了客户端会自动将这些“$”转换为下画线“_”(ClientID),即客户端ID和服务端ID名称是一样的,只是分隔符不同。

 

        我的一个aspx页面有一个 Label1, 我用它来显示图片在服务器上的绝对路径(这个是服务器端控件);还有一个文字超链接,我在它上班定义一个 onclick 触发函数,实现点击即复制Label1中的路径的效果。

js代码如下:

 

效果如图:上传成功的图片,可以在Label1中显示其路径,点击下边的文字链接,促发copy函数,之后这个地址就会保存在剪贴板中了