如何使用JQuery触发Asp:HiddenField onvaluechange事件

How to trigger Asp:HiddenField OnValueChanged event using JQuery?

本文关键字:HiddenField onvaluechange 事件 Asp 何使用 JQuery 触发      更新时间:2023-09-26

我有这个asp:hiddenField控件:

<asp:HiddenField ID="AuxHiddenField" runat="server"/>

我想触发它的(服务器端)值改变事件使用Jquery:

Protected Sub AuxHiddenField_Changed(ByVal sender As Object, ByVal e As System.EventArgs) Handles AuxHiddenField.ValueChanged
    'some logic here      
End Sub

我试着:

$('#AuxHiddenField').val("Mohaha!!");   

Jquery找不到元素,什么也没发生。怎么解呢?

ASP.net使用一个算法来生成ClientID。默认情况下,它基于命名容器的控件依次包含在

中。

很可能生成的HTML中的ID不是AuxHiddenField而是ctl00_AuxHiddenField

设置ClientIDMode:

<asp:HiddenField ID="AuxHiddenField" runat="server" ClientIDMode="Static" />

或者在jquery中,使用属性选择器:

$('input[id$=AuxHiddenField]')  // id ends with AuxHiddenField

我个人不喜欢<%= Field.ClientID %>的方式这样做,因为如果你的javascript是在一个单独的文件,它不会被asp.net处理。

进一步阅读:

    <
  • ClientID属性/gh>
  • 关于asp.net 4中ClientID模式的所有信息

用javascript编程改变一个值不会触发change事件,你必须手动触发它:

$('input[id$=AuxHiddenField]').val("any val").change(); // or .trigger('change');


关于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)。

查找值:

$('#<%= AuxHiddenField.ClientID %>').val("Mohaha!!");

然而,用JavaScript设置一个值永远不会触发一个更改事件,我不认为隐藏支持....