2010-05-10 3 views
1

Я хочу сделать что-то вроде следующего в веб-формы asp.net, но получаю сообщение об ошибке Недопустимый маркер:Как динамически назначать asp.net управления идентификаторами

<ul> 
    <%foreach (var item in Items) {%> 
    <li> 
     <asp:TextBox ID="<%= item.Id %>" runat="server" /> 
    </li> 
    <%} %> 
</ul> 

Какие альтернативные методы существуют для достижения желаемый результат?

ответ

4

Элементы управления на стороне сервера (то есть с runat="server") должны иметь идентификаторы, установленные во время компиляции (поскольку идентификатор используется для обозначения поля элемента, представляющего элемент управления).

Либо:

  • Используйте некоторую форму управления ретранслятором (т.е. создать коллекцию элементов управления) и привязки данных для заполнения.
  • непосредственно создайте HTML (то есть не серверные элементы управления).

В ASP.NET первый из них обычный, с ASP.NET MVC последний (через HTML Helpers) является обычным.

+0

Создав HTML напрямую, я могу получить контроль над обратной записью? Или мне нужно указать атрибут ID? – 2010-05-10 10:29:08

+0

@Akk: вы можете получить доступ к значению из 'Request.Form' любого элемента ввода, но не будет управления ASP.NET. – Richard

+0

Это имеет смысл. ура – 2010-05-10 10:45:12

0

Дайте попробовать на следующий подход: -

foreach (Item item in items) 
    { 
     TextBox txtBox=new TextBox(); 
     txtBox.ID=item.ID; 
     placeHolder.Controls.Add(txtBox); 
    } 

Также убедитесь, что вы не имеете никакого недопустимый символ типа («-»), это может создать проблему для вас иногда.

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