Как установить атрибут имени для HiddenField управления на стороне сервера?

Я хочу установить атрибут "name" для элемента управления HiddenField ASP.NET из кода, но не могу найти свойство "Attributes". Разве это не для цели? Как мне добавить атрибут?

Спасибо

5 ответов

Решение

name Атрибут автоматически вычисляется из свойств идентификатора скрытого поля и его предков в цепочке именования контейнеров. Вы не можете установить это самостоятельно. Вы можете получить к нему доступ только через уникальный идентификатор элемента управления.

Возможное решение, не зная немного больше о вашем коде, состоит в том, чтобы использовать элемент управления Html на стороне сервера, а не веб-элемент управления ASP.NET, добавив атрибут runat="server" в разметку Html:

<input type="hidden" id="myHiddenField" runat="server" />

Затем вы можете динамически указывать идентификатор в коде позади во время выполнения, из которого выводится атрибут 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, дайте ему имя (идентификатор), сделайте его невидимым и сохраните в нем свой текст:

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

То, как я это сделал, было установить ClientIDMode="Static" на HiddenField, а затем установите идентификатор, который я хочу, чтобы мое имя было.

Я получил ужасные документы, но это была небольшая цена, чтобы заставить это работать.

Другие вопросы по тегам