【问题标题】:how to set Name attribute for HiddenField control server-side?如何为 HiddenField 控件服务器端设置名称属性?
【发布时间】:2011-05-05 12:14:24
【问题描述】:

我想从后面的代码中为 ASP.NET 的 HiddenField 控件设置“名称”属性,但我找不到“属性”属性。它不是有目的的吗?如何添加属性?

谢谢

【问题讨论】:

    标签: asp.net hiddenfield


    【解决方案1】:

    name 属性是根据 naming container 链中隐藏字段及其祖先的 ID 属性自动计算的。你不能自己设置。只能通过控件的UniqueID访问。

    【讨论】:

    • “UniqueID”是一个只读属性,我不明白你为什么提到它。这不是我的答案,因为下面的回复解决了我的问题,而不是这个
    • @Shide,我提到它是因为那个(只读,是)属性的值被用作元素的name 属性的值。这就是我所说的你不能自己设置它的意思。
    【解决方案2】:

    一个可能的解决方案是在不了解代码的情况下使用服务器端 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" />
    

    【讨论】:

    • 这个解决方案给出了混合的结果:如果在普通的 vanilla aspx 文件中使用 name 属性确实是“CodebehindName”。如果在更复杂的情况下使用(例如,使用母版页并且字段位于 ContentPlaceHolder 控件中),则自动设置 name 属性并忽略后面代码中给出的值。
    【解决方案3】:

    另一种非正统的处理方法是在客户端设置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" />
    

    【讨论】:

      【解决方案4】:

      忘掉 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");
      

      【讨论】:

      • -1,主要思想是在回发之间持久化数据; DIV 没有帮助。
      • 您可以在 page_load 事件中执行此操作,以便在回发后创建表单控件。您也可以只使用文字控件并添加整个 html,例如 Literal lit = new Literal(); lit.Text = "";
      【解决方案5】:

      我最终这样做的方式是在 HiddenField 上设置 ClientIDMode="Static",然后将 ID 设置为我想要的名称。

      我最终得到了丑陋的 ID,但要让它发挥作用,这是一个很小的代价。

      【讨论】:

        猜你喜欢
        • 2011-05-24
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        相关资源
        最近更新 更多