2013-06-07 3 views
2

Было найдено несколько элементов управления с одинаковым ID 'xxxx'. FindControl требует, чтобы элементы управления имели уникальные идентификаторы.Несколько элементов управления с тем же ID

Я хочу обойти эту проверку. Я хочу иметь одинаковые идентификаторы для нескольких элементов. Я создаю динамические элементы управления, и мой класс css применяется на основе комбинаций id и классов. Все работает, когда страница загружается в первый раз, но на обратной стороне страницы я получаю эту ошибку.

Могу ли я сделать что-нибудь, чтобы обойти эту проверку?

+1

Я думаю, что OP ищет что-то похожее на класс html. – spender

+0

Совет: переименуйте :) Используйте «FindControl» и хотите, чтобы он угадал, что элемент задает слишком много, если только элемент не имеет одной функции, в частности доступной – PiLHA

+1

@ user2463313 Действительно ли вы используете ASP.NET 1.1? –

ответ

2

У вас не может быть нескольких элементов с одним и тем же идентификатором сервера внутри общего NamingContainer.
Если вы действительно хотите иметь тот же идентификатор сервера, поместите свои элементы управления в отдельный NamingContainer (RepeaterItem?).

Теперь, если вам нужен тот же Html/DOM ID, вы не можете этого.
Используйте что-то еще, чем идентификатор, чтобы отличать ваши элементы от точки зрения CSS.
Вы можете использовать частично соответствующий идентификатор, хотя ...

*[id*="_MyButtonID"].red { 
    background-color: red; 
} 
+0

Именование контейнера. Вы говорите, что это разрешено?

Поскольку идентификатор обоих divs отличается, таблица может иметь одинаковый идентификатор? –

+1

Нет, это не контейнер именования, контейнер имен - это то, что обрабатывает ASP.Net. В сгенерированном html-коде вы можете увидеть эффект именования контейнера на свой идентификатор элементов html (что-то вроде «ctrl001 ..._ MyActualServerID») – Serge

+0

Я динамически генерирую элементы управления, и эта работа для меня работала objButton.Attributes.Add ("id" , "duplicateID"); Я могу иметь, как могут, кнопки с одинаковым идентификатором, таким образом. ASP.net не беспокоит меня. :) –

4

В HTML вы не можете иметь несколько элементов с одинаковым идентификатором. Звучит логичнее, что вы переписываете свой CSS, чтобы не основываться на ID.

+0

Ошибка от ASP.NET не от клиентов. –

+0

Хорошо, но я по-прежнему рекомендую переписать CSS. – sphair

+0

@TimSchmelter, можете ли вы рассказать мне, почему я получил ошибку только для обратной передачи? –

2

Вы не можете, ASP требует уникальных идентификаторов. В противном случае как узнать, какой контроль ссылаться в коде?

например

string x = NameBox.Text; 

Ну что бы вы использовать, если у вас было 20 из тех, все с различным содержанием?

Я бы посоветовал вам переписать свой CSS, чтобы он не основывался на идентификаторах, может быть, следовать за Гарри Робертсом способом Hashed Classes?

+0

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

+0

Я генерирую элементы управления динамически, и эта вещь работала для меня objButton.Attributes.Add ("id", "duplicateID"); Я могу иметь, как могут, кнопки с одинаковым идентификатором, таким образом. ASP.net не беспокоит меня. :) –

1

Почему бы не использовать вам предоставить контроль несколько классов вместо того, чтобы полагаться на идентификаторы? Попытка использовать элементы управления с одинаковыми идентификаторами действительно не сработает. не

Например:

<asp:TextBox id="textFirstName" runat="server" CssClass="name firstname" /> 
<asp:TextBox id="textLastName" runat="server" CssClass="name lastname" /> 

В вашем CSS, то вы можете использовать селекторы, такие как .name.firstname для выбора элементов как с именем и классом ПгвЬЫате

Примечание - там нет пробел между именами классов .name.firstname.

+0

Спасибо за ваш ответ, я попробую и этот. –

Смежные вопросы