2011-12-20 91 views
1

我有以下代码:Html.LabelFor一个循环内

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

有没有人知道如何解决这个问题?

UPDATE:

最后我做这种方式,因为的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

可以循环

我会用htmlAttributes定义ID内创建自定义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来确定你已经点击使用$(本)

+0

标签不知道id指向什么,因为名称不同。 – Dean 2011-12-21 10:58:40

1

看看这个帖子从菲尔哈克对象

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

附近的文章,它谈论循环控制和使用数组索引和whatnot。

下面是从那里取得的基本语法,并进行了调整,以适应您的senario。

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

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

<% } %> 

为模型联编程序正确处理它必须有顺序索引。但除此之外,这应该工作。

+0

这似乎并没有工作,它显示这个,它有不同的和ID: Dean 2011-12-21 10:58:08

+0

hmmmmmmmmm,是的,这是不完全正确的,我想id的不能有[]。 你尝试过使用编辑器模板吗? – Patricia 2011-12-21 13:52:13