2013-10-14 54 views
0

我有以下的IEnumerable如何在IEnumerable上使用HTML助手?

public class AuditDetailsViewModel 
    { 
    public string CustAddress { get; set; } 
    public IEnumerable<DefectDetailsViewModel> DefectDetails { get; set; } 

    } 

    public class DefectDetailsViewModel 
    { 
     public string Description { get; set; } 
     public string Comments { get; set; } 
    } 

在我的Razor視圖如何,我可以列舉在這個使用HTML傭工?如果這是一個名單,我可以做類似下面的

@model AIS.Web.Areas.Inspector.ViewModel.AuditDetailsViewModel 
@for (int i = 0; i < Model.DefectDetails.Count(); i++) 
{ 
    @Html.TextBoxFor(m => m.DefectDetails[i].Description) 
} 

,但我該怎麼做,如果視圖模型是一個IEnumerable?

回答

0

你將不得不使用ToList()

var items = Model.DefectDetails.ToList(); 

    @for (int i = 0; i < items.Count; i++) 
    { 
     @Html.TextBoxFor(m => m.Description[i].ToBeAudited) 
    } 

編輯:

不能將索引到一個IEnumerable,這是真的,這就是爲什麼你必須使用ToList變換成一個列表() 。

如果您使用for..each循環,那麼當您回發到控制器時,文本框中的內容將不會被傳輸。您必須對索引器使用for ...循環,否則MVC模型綁定器無法正確綁定數據。

在你的代碼中,在迭代集合之前,你並沒有調用ToList(),因此你得到的錯誤是它無法將索引應用於枚舉。

+0

我想這是不需要了''計數的(),而不是'Count'財產,因爲要轉換爲通用名單。 –

+0

我已更新我的代碼...這似乎並沒有工作..後面的@ Html.TextBoxFor(m => m.Description [i] ...當我按點沒有出現..它說我不能將索引應用於一個ienumerable ...看起來我可能需要更新viewmodel ..只是說List而不是ienumerable ...奇怪的 – user2206329

1

我使用foreach通過一個IEnumerable

foreach(var temp in Model.DefectDetails){ 
    @Html.TextBoxFor(x => temp.Description) 
} 

循環時,希望這有助於

+0

這樣做的回傳嗎?MVC能夠模型綁定嗎? – user2206329

+0

以我的經驗每次你使用幫助器(除displayfor)MVC能夠模型綁定。 –

+0

剛剛閱讀傑森埃文斯答案和谷歌搜索它。這可能有助於http://stackoverflow.com/questions/8894442/mvc-razor-view-nested-foreachs -模型 –