Почему атрибут' name ' на моем скрытом входном элементе изменяется от того, что я установил для него?


Вот моя разметка:

<input type="hidden" runat="server" name="block" id="FSC_show_sidebar_button" value="0" />
<input type="hidden" runat="server" name="block" id="FSC_hide_sidebar_button" value="1" />

Вот как это выглядит, когда страница визуализируется и я ее осматриваю:

<input name="ctl00$MainContent$FSC_show_sidebar_button" id="ctl00_MainContent_FSC_show_sidebar_button" type="hidden" value="0"/>
<input name="ctl00$MainContent$FSC_hide_sidebar_button" id="ctl00_MainContent_FSC_hide_sidebar_button" type="hidden" value="1"/>

Есть ли способ удержать атрибут 'name' от изменения? (Не ID меня не волнует, если это изменится)

3 2

3 ответа:

Из-за атрибута runat="server" это становится элементом управления на стороне сервера. Это добавит вашу мастер-страницу, управляющую информацию к элементу ввода.

Это соглашение об именовании, которое ASP.Net используется для преобразования заданного свойства ID в идентификатор клиента. Вы можете изменить это поведение, установив ClientIDMode собственность. По умолчанию установлено значение "предсказуемо", что означает:

Значение ClientID генерируется путем объединения значения ClientID родительского контейнера именования со значением ID элемента управления.

Сделать ASP.Net используйте идентификатор точно так, как вы указываете, set ClientIDMode=Static. Вы можете установить этот глобально в сеть.config :

<system.web>
    <pages clientIdMode="Static" ... />
</system.web>

Или на уровне страницы (или отдельного элемента управления):

<%@ Page ClientIDMode="Static" ... %>

Это происходит потому, что ваш элемент находится внутри главной страницы, главная страница однозначно идентифицирует элементы управления, называя их контейнерами.

MainContent это имя заполнителя содержимого.

Чтобы избежать искажения этого имени, вам нужно использовать ASP.NET 4.0 ClientIDMode атрибут.

Читать Управление.Свойство ClientIDMode для получения дополнительной информации об атрибуте ClientIDMode.