如何使用jQuery触发Asp:HiddenField的OnValueChanged事件?

6
我有一个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无法找到元素,什么也不会发生。我该怎么办?

2个回答

18

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处理。

更多阅读:


使用JavaScript编程更改值时不会触发change事件,您需要手动触发它:

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

示例代码可以在这里查看。


关于ValueChanged事件

遗憾的是,HiddenField没有AutoPostBack属性(想一想也很合理)。
我认为在更改值后,您需要以编程方式触发一次PostBack。
如果您正在使用 Ajax,请使用__doPostBack();否则,请提交您的表单document.forms[0].submit()

另一种解决方案是用一个不可见的TextBox代替HiddenField:

<asp:TextBox runat="server" ID="mytextbox" Value="" Style="display:none;" AutoPostBack="true" OnTextChanged="mytextbox_TextChanged"></asp:TextBox>

通过程序改变值会在服务端触发事件。
请注意,如果要隐藏文本框,不应使用Visible="false",因为它不会在最终HTML中呈现,应该使用Style="display:none;"属性(CSS)。


谢谢Didier G.,但是您展示的更改事件是客户端输入更改事件。我需要服务器端HiddenField OnValueChanged事件。我如何在服务器端触发OnValueChanged事件? - MichaelS
嗯,不记得有这个“OnValueChanged”的要求了。无论如何,HiddenField没有AutoPostBack(很合理)。你可能需要使用__doPostBack()自己触发postback。你也可以将HiddenField更改为带有display:none的TextField。 - Didier Ghys
+1 是因为如果你的 JavaScript 代码在一个单独的文件中,它就不会被 ASP.NET 处理。 - Devjosh

0

查找一个值:

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

然而,使用JavaScript设置值不会触发更改事件,我认为隐藏元素也不支持它....


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接