能不能禁止 服务器控件客户端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来引用就可以了
-------------
真是好方法。