为什么我不能得到这个隐藏字段的值?
我有一个控件......
<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();
答案 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