为什么$ find不起作用?

时间:2013-05-29 12:58:51

标签: c# .net .net-4.0 webforms

这是我的代码:

// user control
<asp:CheckBox ID="chbGenerali" runat="server" />

// js
var prova = $find("chbGenerali");
console.log(prova.checked);

但我得到TypeError: prova is null。它应该是一种:

document.getElementById("<%=chbGenerali.ClientID%>")
不是吗?

我是否需要启用某些功能

2 个答案:

答案 0 :(得分:4)

默认情况下,ID的设置编译时间并不总是等于运行时的ID。

在使用框架4.0时,可以使用控件上的ClientIDMode属性。

ClientIDMode="Static" 

阅读this博客文章,了解有关ClientIDMode属性的更多信息。

答案 1 :(得分:4)

基本上,由于控制树处理,客户端ID与服务器端不同。 ASP.Net生成客户端,它是控件ID的层次结构的组合。这将确保ID的唯一性。

例如,如果您的控件位于“pnlABC”面板中,并且您的复选框名为“chkGenerali”,则输出clientID将为“pnkABC_chkGenerali”。将此逻辑扩展到整个控制树以获取实际ID。

解决问题的最简单方法是通过以下方式替换您的代码:

var prova = $find("<%= chbGenerali.ClientID%>");

将在渲染时生成实际的客户端ID。