Html.Label для внутри цикла - PullRequest
       3

Html.Label для внутри цикла

1 голос
/ 20 декабря 2011

У меня есть следующий код:

<% foreach (var orderDetail in Model.OrderDetails) { %>
    <div><%= Html.LabelFor( x => orderDetail.DateOfBirth)%></div>
    <div><%= Html.TextBoxFor(x => orderDetail.DateOfBirth) %></div>
<% } %>

Информация отображается, однако я не могу нажать на метку и перейти к текстовому полю, потому что атрибут ID повторяется из-зацикл foreach.

<label for="orderDetail_DateOfBirth">DateOfBirth</label>
<input type="text" value="" name="orderDetail.DateOfBirth" id="orderDetail_DateOfBirth">

Кто-нибудь знает, как это исправить?

ОБНОВЛЕНИЕ:

Я закончил делать это таким образом, так как UpdateModel () тоже не сработало, есть мысли?

<% 
    int i = 0;
    foreach (var orderDetail in Model.OrderDetails) { %>

        <div><label for="DateOfBirth_<%=i %>_">Date of Birth</label></div>
        <div><%= Html.TextBox("DateOfBirth[" + i + "]", orderDetail.DateOfBirth) %></div>

<% i++
   } %>

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

посмотрите на этот пост от Фила Хака

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

в нижней части статьи, где говорится о циклических элементах управления, использовании индексов массивов и еще много чего.

Вот основной синтаксис, взятый оттуда и скорректированный в соответствии с вашим сенарио.

<% for (int i = 0; i < Model.OrderDetails.count; i++) { %>

  <%: Html.LabelForm(m =>  Model.OrderDetails[i].DateOfBirth) %>
  <%: Html.TextBoxFor(m => Model.OrderDetails[i].DateOfBirth) %>

<% } %>

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

0 голосов
/ 20 декабря 2011

Вы можете создать собственный идентификатор внутри цикла

Я бы использовал htmlAttributes для определения идентификатора.Например:

<%
        int i = 0;
        foreach (var orderDetail in Model.OrderDetails) { 

           %>

    <div><%= Html.LabelFor( x => orderDetail.DateOfBirth)%></div>
    <div><%= Html.TextBoxFor(x => orderDetail.DateOfBirth, new { id = "orderDetailDateOfBirth_" + i++ })%></div>
<% } %>

Или вы можете использовать:

jquery для определения объекта, на который вы щелкнули, используя $ (this)

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