2014-04-04 68 views
0

我在剃刀的foreach在index.html的綁定對象:模型綁定泛型列表在asp.net mvc的空

VIEW

@using (Ajax.BeginForm("Save", "Unit", new AjaxOptions { OnSuccess = "onSuccess" })) 
    { 

<button type="submit" class="btn btn-default" id="saveUnits"><i class="fa fa-save"></i></button> 


    <table> 
     <tbody> 
      @foreach (var item in Model) 
      { 
       <tr> 

        @Html.HiddenFor(modelItem => item.UnitId) 
        <td> 
         @Html.EditorFor(modelItem => item.Name) 
        </td> 
        <td> 
         @Html.EditorFor(modelItem => item.ErrorText) 
        </td> 

       </tr> 
      } 
     </tbody> 
    </table> 
} 

我已經抓住發送到我的數據與小提琴手和行動參數得到這個:

item.UnitId=5& 
item.Name=111111111111& 
item.ErrorText=fsdddddddddddddddd+& 

item.UnitId=5& 
item.Name=+& 
item.ErrorText=dddddd+& 

ACTION

public ActionResult Save(List<Unit> units) 
{ 
    return new EmptyResult(); 
} 

視圖模型

public class Unit 
{ 
    [HiddenInput(DisplayValue = false)] 
    public int UnitId { get; set; } 

    [DataType(DataType.MultilineText)] 
    public string Name { get; set; } 

    [DataType(DataType.MultilineText)] 
    public string ErrorText { get; set; 
} 

爲什麼我的單位例如空?屬性匹配,所以他們應該被綁定!

我忽略了什麼?

+0

可能重複 - 型號與各表綁定列表記錄是列而不是行](http://stackoverflow.com/questions/10885679/mvc-3-model-binding-a-list-in-a-table-with-each-record-being-a-column -instead) – glautrou

回答

2

您需要使用for循環而不是foreach循環。另外,最好讓你的Model類擁有一個屬性集合。

你的模型可能是這樣的:

public class UnitsViewModel 
{ 
    public List<Unit> Units { get; set; } 

    public class Unit 
    { 
     [HiddenInput(DisplayValue = false)] 
     public int UnitId { get; set; } 

     [DataType(DataType.MultilineText)] 
     public string Name { get; set; } 

     [DataType(DataType.MultilineText)] 
     public string ErrorText { get; set; } 
    } 
} 

而且你可以做你的CSHTML如下:

@for (int i = 0; i < Model.Count; i++) 
{ 
    <tr> 

     @Html.HiddenFor(m => m.Units[i].UnitId) 
     <td> 
      @Html.EditorFor(m => m.Units[i].Name) 
     </td> 
     <td> 
      @Html.EditorFor(m => m.Units[i].ErrorText) 
     </td> 

    </tr> 
} 
的[MVC 3
+0

但爲什麼剃鬚刀腳手架工具使它成爲一個foreach? – Elisabeth

+0

從modelItem [i]中獲取當前元素,而不是從Model [i]中獲取?那沒有意義。我得到一個錯誤,我不得不使用List,因爲IEnumerable不知道[]運算符。剃刀迫使我使用列表???當我在索引頂部站點更改爲列表時,所有我的標題摘要都是無效的:@ Html.EditorFor(item => item.Name) – Elisabeth

+1

http://stackoverflow.com/questions/14165632/asp-net-mvc- 4-for-loop-posts-model-collection-properties-but-foreach-do-not-ok其技術限制它必須是for循環與索引否則它不能綁定正確的項目... – Elisabeth