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

我知道这已经得到解答和解决,但这里有两个更好(在我看来)和更简单的替代方案。如果您使用的是 .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 回答