2014-04-04 50 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