ASP.net 使用一种算法来生成ClientID。默认情况下,它基于命名容器的控件被包含在相继中。
生成的 HTML 中的 ID 很可能不是 AuxHiddenField,而是类似于 ctl00_AuxHiddenField。
要么设置ClientIDMode:
<asp:HiddenField ID="AuxHiddenField" runat="server" ClientIDMode="Static" />
或者在 jquery 中,使用attirute selectors:
$('input[id$=AuxHiddenField]') // id ends with AuxHiddenField
我个人不喜欢 <%= Field.ClientID %> 这样做的方式,因为如果您的 javascript 在单独的文件中,它不会被 asp.net 处理。
进一步阅读:
使用 javascript 以编程方式更改值不会触发 change 事件,您必须手动触发它:
$('input[id$=AuxHiddenField]').val("any val").change(); // or .trigger('change');
在行动here。
关于 ValueChanged 事件
不幸的是,HiddenField 没有AutoPostBack 属性(毕竟是有道理的)。
我认为您必须在更改值后以编程方式触发回发。
如果您使用 ajax,请使用 __doPostBack(),否则,请提交您的表单 document.forms[0].submit()。
另一种解决方案是将 HiddenField 替换为不可见的 TextBox:
<asp:TextBox runat="server" ID="mytextbox" Value="" Style="display:none;" AutoPostBack="true" OnTextChanged="mytextbox_TextChanged"></asp:TextBox>
以编程方式更改值将在服务器端引发事件。
请注意,对于隐藏文本框,您不应使用Visible="false,因为它不会在最终的 html 中呈现,请使用 Style="display:none;" 属性 (css)。