【发布时间】:2011-05-05 12:14:24
【问题描述】:
我想从后面的代码中为 ASP.NET 的 HiddenField 控件设置“名称”属性,但我找不到“属性”属性。它不是有目的的吗?如何添加属性?
谢谢
【问题讨论】:
标签: asp.net hiddenfield
我想从后面的代码中为 ASP.NET 的 HiddenField 控件设置“名称”属性,但我找不到“属性”属性。它不是有目的的吗?如何添加属性?
谢谢
【问题讨论】:
标签: asp.net hiddenfield
name 属性是根据 naming container 链中隐藏字段及其祖先的 ID 属性自动计算的。你不能自己设置。只能通过控件的UniqueID访问。
【讨论】:
name 属性的值。这就是我所说的你不能自己设置它的意思。
一个可能的解决方案是在不了解代码的情况下使用服务器端 Html 控件而不是 ASP.NET Web 控件,方法是将 runat="server" 属性添加到 Html 标记:
<input type="hidden" id="myHiddenField" runat="server" />
然后,您可以在运行时在后面的代码中动态指定 id,从中推断出 name 属性:
myHiddenField.ID = "CodebehindName";
myHiddenField.Value = "myValue";
这将导致以下输出:
<input name="CodebehindName" type="hidden" id="CodebehindName" value="myValue" />
【讨论】:
另一种非正统的处理方法是在客户端设置name属性。如果您要向第三方(例如 PayPal)发布信息,这将非常有用。
jQuery EG:
<script type="text/javascript">
$(function () {
$('#BusinessHid').prop('name', 'business')
$('#CurrencyHid').prop('name', 'currency_code')
$('#InvoiceHid').prop('name', 'invoice')
$('#AmountHid').prop('name', 'amount')
})
</script>
<asp:HiddenField ID="BusinessHid" runat="server" ClientIDMode="Static" />
<asp:HiddenField ID="CurrencyHid" runat="server" ClientIDMode="Static" />
<asp:HiddenField ID="InvoiceHid" runat="server" ClientIDMode="Static" />
<asp:HiddenField ID="AmountHid" runat="server" ClientIDMode="Static" />
【讨论】:
忘掉 HiddenField 控件,改用 Label,给它一个名字(一个 id),让它不可见,然后把你的文本存进去:
label = new System.Web.UI.WebControls.Label() {
Text = "Here my hidden text",
};
label.Attributes.Add("id", "MyHiddenFieldID");
label.Attributes.Add("style", "display:none;");
myParentControl.Controls.Add(label);
在你的 javascript 中获取你的隐藏字段:
var myHiddenField = document.getElementById("MyHiddenFieldID");
【讨论】:
我最终这样做的方式是在 HiddenField 上设置 ClientIDMode="Static",然后将 ID 设置为我想要的名称。
我最终得到了丑陋的 ID,但要让它发挥作用,这是一个很小的代价。
【讨论】: