asp asp.net jquery hidden-field

asp.net - asp hiddenfield set value javascript



Jquery Hidden Field (6)

Agregue un atributo de clase ".myHiddenValue" a la etiqueta y luego use

var myVal = $(".myHiddenValue").val()

o dado que esto se renderizará después de cargar el documento mi consejo use esto

$(document).ready(function(){ var myVal = $("input[name=''ctl00$cph_main$HiddenFieldServerDateTime'']").val(); } ); Note: also applies for the first example as well

¿Por qué no puedo obtener el valor de este campo oculto?

Tengo un control ...

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

Que se rinde como ...

<input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" value="08/01/2010 10:54:11"

Que estoy tratando de obtener el valor de usar ...

var serverDateTime = $("#HiddenFieldServerDateTime").attr(''value'');

¿Así que qué hay de malo?

prefiero esto

var dateTime = $("[id$=_HiddenFieldServerDateTime]").val();


Esto también funcionará al usar jQuery para seleccionar todos los ID que terminen con _ HiddenFieldServerDateTime .

var myVal = $("[id$=''_HiddenFieldServerDateTime'']").val();


Me encontré con un problema similar y mi respuesta fue crear un nuevo control que hereda de HiddenField y le da una propiedad CssClass :

public class HiddenFieldWithClass : HiddenField { [CssClassProperty] [DefaultValue("")] public virtual string CssClass { get { string Value = this.ViewState["CssClass"] as string; if (Value == null) Value = ""; return Value; } set { this.ViewState["CssClass"] = value; } } protected override void Render(HtmlTextWriter writer) { if (this.CssClass != "") { writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass); } base.Render(writer); } }

Ahora puedo asignar una clase a mis campos ocultos y usar el valor de la clase para encontrar el campo correcto en el lado del cliente.

También puede valer la pena señalar que en mi caso los campos ocultos se crean dinámicamente en el código subyacente, lo anterior puede necesitar algunas mejoras para ser utilizables en el diseñador.

Espero que esto ayude a alguien más en el camino.


Porque jQuery no sabe nada de asp:HiddenField . Se ve en la estructura HTML donde tiene <input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" ... Así que no hay entrada con ID= HiddenFieldServerDateTime . Hay algunas maneras de superar esto:

  • Utilice un selector css:

    <asp:HiddenField ID="HiddenFieldServerDateTime" runat="server" CssClass="SomeStyle" />

    con el siguiente selector: var serverDateTime = $(".SomeStyle").val();

    CssClass no es una clase disponible en la clase HiddenField (y no tiene una colección de Attributes , por lo que no puede agregarla manualmente).

  • Use la propiedad ClientID :

    var serverDateTime = $("#<%= HiddenFieldServerDateTime.ClientID %>").val();

  • Envuelve el campo oculto en algo que puedas seleccionar:

    <div class="date-time-wrap"> <asp:HiddenField ID="..." runat="server" /> </div>

    var serverDateTime = $(''.date-time-wrap input[type=hidden]'').val();


Sé que esto ya ha sido respondido y resuelto, pero aquí hay dos mejores (en mi opinión) y alternativas más simples. Si usa .NET4 (o superior), puede usar ClientIDMode = "Static" para forzar que su ID se use en el HTML generado:

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

lo que significa que puedes hacer esto en tu JQuery:

var serverDateTime = $(''#HiddenFieldServerDateTime'').val();

o si desea utilizar la ruta de la clase css, utilice una ASP normal: TextBox (que tiene un atributo CssClass) pero simplemente no la muestre:

<asp:TextBox ID="HiddenFieldServerDateTime" runat="server" style="display:none" CssClass="MyStyle"></asp:TextBox>

lo que te permite hacer esto:

var serverDateTime = $(''.MyStyle'').val();

Tenga en cuenta que la clase css que utiliza no tiene que ser declarada en ningún lugar. Puedes usarlo como marcador.


<input type="hidden" ID="HiddenFieldServerDateTime" runat="server" class="HiddenFieldServerDateTime" />