How to trigger Asp:HiddenField OnValueChanged event using JQuery?

14,189

ASP.net uses an algorithm to generate ClientID. By default it is based on the naming container's the control is contained in successively.

It's likely the ID in generated HTML is not AuxHiddenField but something like ctl00_AuxHiddenField.

Either set the ClientIDMode:

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

Or in jquery, using attirute selectors:

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

I personnaly don't like the <%= Field.ClientID %> way of doing this because if your javascript is in a separate file, it won't be processed by asp.net.

Further reading:


Changing programmatically a value with javascript does not fire the change event, you have to trigger it manually:

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

In action here.


About the ValueChanged event

Unfortunately, the HiddenField does not have the AutoPostBack property (makes sense afterall).
I think you will have to trigger a postback programmatically after changing the value.
If you are working ajax, use __doPostBack(), otherwise, submit your form document.forms[0].submit().

Another solution would be to replace the HiddenField by an invisible TextBox:

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

Changing the value programmatically will raise the event server-side.
Please note that for hiding the textbox, you should not use Visible="false because then it is not rendered in final html, use the Style="display:none;" property (css).

Share:
14,189
MichaelS
Author by

MichaelS

SOreadytohelp

Updated on October 05, 2022

Comments

  • MichaelS
    MichaelS over 1 year

    I have this asp:hiddenField control:

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

    I would like to trigger its (server side) value changed event using Jquery:

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

    I tried:

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

    Jquery fails to find the element and nothing happens. How do I solve this?

  • MichaelS
    MichaelS over 12 years
    Thanks Didier G. But the change event you are showing is the client side input change event. I need the server side HiddenField OnValueChanged event. How can I trigger the OnValueChanged event on server side?
  • Didier Ghys
    Didier Ghys over 12 years
    Hm, don't recall this 'OnValueChanged' requirement. Anyway, HiddenField does not have AutoPostBack (makes sense). You probably would have to trigger the postback yourself with __doPostBack(). You could also change the HiddenField for a TextField with display:none for instance.
  • Devjosh
    Devjosh about 12 years
    +1 for because if your javascript is in a separate file, it won't be processed by asp.net.