在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);

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐