Jquery隐藏的领域

时间:2010-01-08 10:59:24

标签: asp.net jquery hidden-field

为什么我不能得到这个隐藏字段的值?

我有一个控件......

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

6 个答案:

答案 0 :(得分: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();
    

答案 1 :(得分:20)

我知道这已经得到了回答和解决,但这里有两个更好的(在我看来)和更简单的替代方案。如果您使用的是.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类不必在任何地方实际声明。您可以将它用作标记。

答案 2 :(得分: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);
    }
}

我现在能够为隐藏字段分配一个类,并使用类值在客户端找到正确的字段。

也许值得注意的是,在我的情况下,隐藏字段是在代码后面动态创建的,上面可能需要一些增强才能在设计器中使用。

希望这可以帮助其他人。

答案 3 :(得分:7)

通过使用jQuery选择以_ HiddenFieldServerDateTime 结尾的所有ID,这也可以。

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

答案 4 :(得分:4)

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

答案 5 :(得分: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