在js前台页面直接调用.NET控件的ID属性很容易出问题,为什么这么说呢,我们知道一个.NET控件,它有ID,UniqueID(服务器ID,只读),ClientID(客户端ID,只读)三种唯一标记方式。我甚至发现一些有过开发经验的人都会犯这样的错误,他直接在js中调用.NET服务器控件的ID,如:<%= TextBox1%> ,一开始可能没发现什么不妥,但是一旦只要该服务器控件有了父容器控件,这时杯具就发生了。我们知道,如果.net服务器控件存在父容器控件,那么它会自动将父容器的ID作为服务器控件ID命名的一部分。客户端ID是通过_相连,而服务器ID是通过$相连。如:ID:TextBox 、ClientID:panel1_TextBox1、UniqueID:panel$TextBox1
以下调用方法是正解:
在C#后台代码中添加:
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterArrayDeclaration("IDArray", string.Format("'{0}','{1}','{2}','{3}'", tvAll.ClientID, tvSelect.ClientID,selectEmployeTable.ClientID,rowIdHid.ClientID));
}
在js前台调用:
document.getElementById(IDArray[3]).value ;
另外我有个疑惑,这是我在项目开发中碰到的一个新问题,在web用户控件中,js调用C#后台方法会调用不到,而在普通的aspx.cs页面中可以。求高手解释!
后台带参数的C#方法
public string Show(string name)
{
return name + " Hello World!";
}
前台js调用:
var v="abc";
var s='<%=Show(" '+v+'")%>';
alert(s);
后台不带参数的C#方法
public string Show()
{
return “Hello World!";
}
前台js调用:
var v='<%=Show()%>';
alert(v);
理解JS与.NET控件ID属性交互的陷阱与解决方案
本文深入探讨了在JS前台页面直接调用.NET控件ID时可能遇到的问题,包括服务器控件ID命名规则、客户端与服务器ID的区别以及如何正确使用Page.ClientScript.RegisterArrayDeclaration方法来解决跨容器调用问题。同时,文章揭示了一个新问题:在web用户控件中,JS调用C#后台方法时的表现与普通aspx.cs页面不同,并详细解析了原因。
346

被折叠的 条评论
为什么被折叠?



