2013-01-08 45 views
1

我試圖找到一種方式來編輯在我的數據庫中的條目,我的模型是這樣的:MVC C#的複雜模型編輯

public class ComplexModel { 
public int id {get;set;} 
public string Name {get;set;} 
public List<Lines> FavoriteNumbers {get;set;} 
} 

public class Lines{ 
public int id {get ;set ;} 
public string FavoriteLetter {get;set;} 
} 

我的觀點中有這樣一段列出輸入框

@model MvcApplication.Models.ComplexModel 
@using(BeginForm()){ 
<fieldset> 
<legend>Enter your name</legend> 
@Html.EditorFor(model=>model.Name) 
</fieldset> 
@foreach (var item in Model.FavoriteNumber) 
      {  

       <fieldset> 
       <legend>Favorite number:</legend> 
       @Html.EditorFor(model=>item.FavoriteLetter) 
       </fieldset> 
      } 
<input type="submit" value="Save"> 
} 

這樣就可以編輯ComplexModel中的每一行嗎? 我試圖編輯,但在控制器中它說我的列表是空/空。

回答

0

而是一個foreach的,使用for循環。這將是這個樣子:

@for (int i=0; i < Model.FavoriteNumbers.Count; i++) 
     {  
      <fieldset> 
      <legend>Favorite number:</legend> 
      @Html.EditorFor(model=>model.FavoriteNumbers[i].FavoriteLetter) 
      @Html.HiddenFor(model=>model.FavoriteNumbers[i].id) 
      </fieldset> 
     } 

我加入了HiddenFor ID爲確保東西張貼的項目。否則,如果數據發佈並且一個字段留空,該列表將被打破。

+0

Foreach不是問題,它比for循環提供更好的可讀性。我看不出爲什麼你會建議改變它。這個問題很可能是由簡單的錯字造成的,就像普拉頓說的那樣。 – LambdaCruiser

+0

我見過的所有列表模型綁定示例都使用了for循環,所以我只是習慣於這樣做。我不認爲你可以可靠地分辨出沒有索引的那條線。在這個例子中可能並不重要,但它可能是相關的。 – Trax72

+0

經過一番測試,我傾向於說,根本不可能用foreach來做到這一點。除非列表包含一個簡單類型,如字符串,在這種情況下,您可以使用類似Html.TextBox(「FavoriteNumbers」,item.FavoriteLetter)。在這種情況下Html.EditorFor不起作用。 – Trax72

2

你應該使用Model.FavoriteNumberS,不Model.FavoriteNumber ...