Html.LabelFor循环内部

时间:2011-12-20 13:32:29

标签: asp.net-mvc-2

我有以下代码:

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

正在显示信息,但是,我无法单击标签并转到文本框,因为由于foreach循环,ID属性正在重复。

<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 个答案:

答案 0 :(得分:1)

看一下phil haack的这篇文章

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

在文章的底部附近,它讨论了循环控件和使用数组索引等等。

这是从那里采取的基本语法,并调整为适合您的senario。

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

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

<% } %>

要使模型绑定器正确处理它,它必须具有顺序索引。但除此之外,这应该有效。

答案 1 :(得分:0)

您可以在循环中创建自定义ID

我会使用htmlAttributes来定义id。 如:

<%
        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)

点击的对象