30 Stimmen

Jquery Verstecktes Feld

Warum kann ich den Wert dieses verborgenen Feldes nicht abrufen?

Ich habe eine Kontrolle...

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

Was sich wie folgt darstellt...

<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 von...

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

Was ist also los?

Ich bevorzuge dies

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

58voto

Darin Dimitrov Punkte 990883

Denn jQuery weiß nichts über asp:HiddenField . Es sucht in der HTML-Struktur, wo Sie <input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" ... . Es gibt also keine Eingabe mit ID= HiddenFieldServerDateTime . Es gibt einige Möglichkeiten, dieses Problem zu lösen:

  • Verwenden Sie einen css-Selektor:

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

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

    CssClass ist keine verfügbare Klasse in der HiddenField Klasse (und sie hat keine Attributes Sammlung, Sie können sie also nicht manuell hinzufügen).

  • Utilice ClientID Eigentum:

    var serverDateTime = $("#<%= HiddenFieldServerDateTime.ClientID %>").val();
  • Umhüllen Sie das ausgeblendete Feld mit etwas, das 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();

21voto

CodeClimber Punkte 4418

Ich weiß, dass dies bereits beantwortet und gelöst wurde, aber hier sind zwei bessere (meiner Meinung nach) und einfachere Alternativen. Wenn Sie .NET4 (oder höher) verwenden, können Sie ClientIDMode="Static" verwenden, um zu erzwingen, dass Ihre ID im generierten HTML verwendet wird:

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

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

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

oder wenn Sie die css-Klasse Route verwenden möchten, dann verwenden Sie eine normale ASP:TextBox (die ein CssClass-Attribut hat), aber nur nicht angezeigt werden:

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

die Ihnen dies ermöglicht:

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

Beachten Sie, dass die verwendete css-Klasse nirgendwo deklariert sein muss. Sie können sie einfach als Markierung verwenden.

0 Stimmen

Ich mag die Textbox-Option. Die ClientIDMode=Static scheint mir riskant, aber dann verbringe ich eine Menge Zeit bauen Steuerelemente, die schön spielen müssen, wenn es mehrere Instanzen von ihnen sind.

0 Stimmen

ClientIDMode funktioniert gut für ein einzelnes Steuerelement, aber nicht so gut in einem Repeater, da sie alle die gleiche ID erhalten.

10voto

Rozwel Punkte 1900

Ich bin gerade auf ein ähnliches Problem gestoßen und meine Antwort war, ein neues Steuerelement zu erstellen, das von HiddenField und gibt ihm eine CssClass Eigentum:

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 kann nun meinen ausgeblendeten Feldern eine Klasse zuweisen und den Klassenwert verwenden, um das richtige Feld auf der Client-Seite zu finden.

Vielleicht ist es auch erwähnenswert, dass in meinem Fall die ausgeblendeten Felder dynamisch im Code dahinter erstellt werden, die oben genannten können einige Erweiterungen benötigen, um im Designer verwendbar zu sein.

Ich hoffe, dies hilft anderen auf ihrem Weg.

7voto

Das funktioniert auch, wenn Sie jQuery verwenden, um alle IDs auszuwählen, die mit _ enden. HiddenFieldServerDateTime .

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

4voto

Matthew O'Leary Punkte 41

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X