Как использовать ClientIDMode в ASP.NET 4 - PullRequest
2 голосов
/ 30 августа 2011

Значением по умолчанию ClientIDMode для страницы является AutoID.Значением по умолчанию ClientIDMode для элемента управления является Inherit.Если вы не установите ClientIDMode для страницы или для каких-либо элементов управления на странице, все элементы управления будут использовать алгоритм AutoID.

Это из MSDN. Но когда я создалвеб-приложения в ASP.NET 4 или даже 3.5, все идентификаторы элемента управления, что я написал для них.Они не генерируются алгоритмом autoId.Затем я попытался вручную добавить clientIDMode = "AutoID" к элементам управления, это также не работает, как я ожидал.Так в чем проблема ?Есть ли какое-либо правило, чтобы сделать его доступным?

Заранее спасибо,

РЕДАКТИРОВАНИЕ

Это на странице .aspx

<div>
    <asp:Panel ID="Panel1" runat="server">
        <asp:Panel ID="Panel2" runat="server">
            <asp:Panel ID="Panel3" runat="server">
                <asp:Panel ID="Panel4" runat="server">
                    (:
                </asp:Panel>
            </asp:Panel>
        </asp:Panel>
    </asp:Panel>
</div>

Это вывод:

<div id="Panel1">
        <div id="Panel2">

                <div id="Panel3">

                    <div id="Panel4">
                        (:
                </div>

        </div>

    </div>
</div>

Ответы [ 2 ]

4 голосов
/ 30 августа 2011

Причина, по которой вы получаете все свои идентификаторы такими, какие вы есть, заключается в том, что у .NET Framework нет причин менять их.

Если вы поместили свои Panel в элемент управления Repeater, товсе они будут изменены, чтобы избежать нескольких идентификаторов с одинаковым именем.

Пример (неправильная разметка):

<asp:Repeater id="repeater1" runat="server">
  <template>
      <asp:Panel id="Panel1" runat="server">
          <asp:Panel id="Panel2" runat="server">

          </asp:Panel>
      </asp:Panel>
  </template>
</asp:Repeater>

Ваш HTML-код, сгенерированный из этого, будет показывать, что идентификаторы Panelизменено для наследования от содержащего элемента управления.Что-то вроде repeater1_ct100_Panel1

То же самое происходит, когда вы используете мастер-страницы, держатели контента и элементы управления DataBound..NET обновляет идентификаторы, чтобы избежать нескольких идентификаторов с одинаковым именем.

1 голос
/ 30 августа 2011

Различия между различными значениями ClientIDMode могут быть четко видны, если вы вложите один элемент управления в другой; режим AutoId присваивает имя элементу управления после каждого родительского контейнера именования, а режим Static запускает новую иерархию именования. Режим Predictable в основном используется с элементами управления привязкой данных, тогда как режим Inherit заставляет элемент управления использовать ClientIDMode его родителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...