2011-12-20 87 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