30

この隠しフィールドの値を取得できないのはなぜですか?

私にはコントロールがあります...

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

としてレンダリングされます...

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

私が使用する価値を得ようとしているのは...

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

では、何が問題なのですか?

私はこれが好きです

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

6 に答える 6

58

jQuery は について何も知らないからasp:HiddenFieldです。持っているHTML構造を調べます<input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" ...。したがって、との入力はありませんID= HiddenFieldServerDateTime。これを克服するにはいくつかの方法があります。

  • CSS セレクターを使用します。

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

    次のセレクターを使用します。var serverDateTime = $(".SomeStyle").val();

    CssClassクラスで使用可能なクラスではありHiddenFieldません (Attributesコレクションがないため、手動で追加することはできません)。

  • 使用ClientIDプロパティ:

    var serverDateTime = $("#<%= HiddenFieldServerDateTime.ClientID %>").val();
    
  • 非表示フィールドを選択可能なものでラップします。

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

     

    var serverDateTime = $('.date-time-wrap input[type=hidden]').val();
    
于 2010-01-08T11:11:43.543 に答える
21

私はこれがすでに答えられ解決されていることを知っていますが、ここに2つのより良い(私の意見では)そしてより単純な選択肢があります。.NET4(またはそれ以降)を使用している場合は、ClientIDMode = "Static"を使用して、生成されたHTMLでIDを強制的に使用できます。

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

これは、JQueryでこれを実行できることを意味します。

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

または、cssクラスルートを使用する場合は、通常のASP:TextBox(CssClass属性を持つ)を使用しますが、表示しないでください。

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

これにより、これを行うことができます。

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

使用するcssクラスは、実際にどこかで宣言する必要はないことに注意してください。マーカーとして使用できます。

于 2012-02-16T10:35:16.637 に答える
10

同様の問題に遭遇したばかりで、私の答えは、継承してプロパティHiddenFieldを与える新しいコントロールを作成することでした: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);
    }
}

クラスを隠しフィールドに割り当て、クラス値を使用してクライアント側で正しいフィールドを見つけることができるようになりました。

私の場合、非表示フィールドがコード ビハインドで動的に作成されていることも注目に値するかもしれません。デザイナーで使用できるようにするには、上記の機能を強化する必要があるかもしれません。

これが途中で他の誰かに役立つことを願っています。

于 2012-01-06T16:36:10.447 に答える
7

これは、jQuery を使用して _ HiddenFieldServerDateTimeで終わるすべての ID を選択することによっても機能します。

var myVal = $("[id$='_HiddenFieldServerDateTime']").val();
于 2011-04-12T03:04:29.120 に答える
4

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

于 2011-03-16T19:06:34.313 に答える
1

クラス属性「.myHiddenValue」をタグに追加してから使用します

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

または、これはドキュメントのロード後にレンダリングされるため、これを使用することをお勧めします

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

Note: also applies for the first example as well
于 2010-01-08T11:26:20.310 に答える