日期:2014-05-18  浏览次数:20422 次

能不能禁止 服务器控件客户端ID名字改变???
问题如下:
服务器控件放置在模板页中, <asp:TextBox   ID= "txtName "   runat= "server "> </asp:TextBox>
执行以后:
<input   name= "ctl00$ContentPlaceHolder1$txtName "   type= "text "   id= "ctl00_ContentPlaceHolder1_txtName "   />

这样javascript脚本很不好操作,有没有办法让他的id和name运行后不改变呢?
(注:如果不使用模板,做一个简单页面,服务器控件的id运行后不会改变。)

------解决方案--------------------
你写后台代码时用 this.txtName
就能获取客户端输入的值
------解决方案--------------------
据我所知,目前没办法,生成的HTML的ID肯定带ctl00_Content_
------解决方案--------------------
貌似没有办法,GridView里面的控件的ClientID是只读的
生成出来的每行的ID倒是可以自己定义ID
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Attributes[ "id "] = "mytr " + i.ToString();
}
------解决方案--------------------
把你操作那个控件的JS从后台写入就可以了。

this.Response.Write( " <script> javascript:document.getElementById( ' " + TextBox1.ClientID + " ') </script> ");

如果出发事件的是TextBox本身的话更好办。

只要在JS中
oEl = event.srcElement;
那么oEl就是触发事件的控件,那样就不用getElementById了



------解决方案--------------------
不可能禁止这个功能,如果能禁止,那ASP.NET就难做了,呵呵。

用ClientId来取客户端id进行操作吧
------解决方案--------------------
var obj=document.getElementById( " <%=TextBox1.ClientID% ");
------解决方案--------------------
现在就是这样,将就一下吧
------解决方案--------------------
为了保证html内id的唯一性才这么做的 怎么会是问题
Control.ClientID返回的就是你要的id
------解决方案--------------------
我的解决方法:
在控件旁边加一个 <div id= "这里的ID有规律 " /> ,如:
<asp:TextBox ID= "txtName " runat= "server "> </asp:TextBox> <div id= "myDiv_1 " />

在js中:
document.getElementById( "myDiv_1 ").previousSibling来引用就可以了
------解决方案--------------------

我的解决方法:
在控件旁边加一个 <div id= "这里的ID有规律 " /> ,如:
<asp:TextBox ID= "txtName " runat= "server "> </asp:TextBox> <div id= "myDiv_1 " />

在js中:
document.getElementById( "myDiv_1 ").previousSibling来引用就可以了


-------------
真是好方法。