Frage

Warum kann ich nicht bekommen, den Wert dieses verstecktes Feld?

Ich habe eine Kontrolle ...

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

Was macht als ...

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

Was ich versuche, den Wert der Verwendung zu bekommen ...

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

Also, was ist los?

Ich ziehe diese

var dateTime = $("[id$=_HiddenFieldServerDateTime]").val();
War es hilfreich?

Lösung

Da jQuery nichts über asp:HiddenField weiß. Es sieht in der HTML-Struktur, wo Sie <input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" ... haben. Also gibt es keine Eingabe mit ID= HiddenFieldServerDateTime. Es gibt ein paar Möglichkeiten, dies zu überwinden:

  • einen CSS-Selektor verwenden:

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

    mit dem folgenden Selektor: var serverDateTime = $(".SomeStyle").val();

    CssClass ist nicht verfügbar Klasse auf der HiddenField Klasse (und es nicht haben eine Attributes Sammlung, so dass Sie es nicht manuell hinzufügen).

  • ClientID Eigenschaft verwenden:

    var serverDateTime = $("#<%= HiddenFieldServerDateTime.ClientID %>").val();
    
  • das versteckte Feld in etwas Wickeln Sie auswählen können:

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

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

Andere Tipps

Ich weiß, das wurde bereits beantwortet und gelöst werden, aber hier sind zwei besser (meiner Meinung nach) und einfacheren Alternativen. Wenn Sie .NET4 (oder höher) verwenden, können Sie ClientIDMode = „Static“ verwenden, um Ihre ID zu zwingen, in der generierten HTML verwendet werden:

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

Das bedeutet, Sie können dies tun, in Ihrem JQuery:

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

oder, wenn Sie die CSS-Klasse Route verwenden, dann verwenden Sie eine normale ASP: TextBox (die ein CssClass Attribut hat), aber es einfach nicht angezeigt werden:

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

das Ihnen erlaubt, dies zu tun:

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

Beachten Sie, dass die CSS-Klasse, die Sie verwenden, nicht wirklich überall deklariert werden muss. Sie können es einfach als Marker verwendet werden.

Ich lief in ein ähnliches Problem und meine Antwort war, um eine neue Kontrolle vornehmen, die von HiddenField erbt und gibt ihm eine CssClass Eigenschaft:

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);
    }
}

Ich bin jetzt in der Lage, eine Klasse zu meinen versteckten Felder zuweisen und den Klassenwert verwenden, um das richtige Feld auf der Client-Seite zu finden.

Könnte auch wert sein, unter Hinweis darauf, dass die verborgenen Felder in meinem Fall hinter sich dynamisch in Code erstellt wird, kann das oben einige enhancments müssen verwendbar im Designer sein.

Hope, das hilft jemand anderes auf dem Weg.

Das funktioniert auch von jQuery mit allen IDs auszuwählen, die mit _ beenden HiddenFieldServerDateTime .

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

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

ein Klassenattribut ".myHiddenValue" mit dem Tag hinzufügen dann verwenden

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

oder da dies macht, nachdem das Dokument meinen Rat Verwendung Laden der

$(document).ready(function(){
   var myVal = $("input[name='ctl00$cph_main$HiddenFieldServerDateTime']").val();
 }
);

Note: also applies for the first example as well
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top