我有以下代码:
<% 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++
} %>
答案 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)
点击的对象