asp.net - 绑定到嵌套集合的MVC模型

Chr*_*ian 3 model-binding asp.net-mvc-4

我有一节课:

public class ClientInformation{
    public string UserName {get; set;}
    public ICollection<RegionDistrictCity> RegionDistrictCity
    {
        get;
        set;
    }

  public class RegionDistrictCity
  {
     public string Region { get; set; }
     public string District { get; set; }
     public string City { get; set; }
  }
}
Run Code Online (Sandbox Code Playgroud)

为了使模型绑定器填充集合"ICollection RegionDistrictCity",应如何在html中为属性Region,Distirct,City格式化输入元素的name属性?

我尝试使用类型为"ClientInformation"的参数的动作方法和格式化为"[index] .PropertyName"的html名称属性,但在这种情况下,只有属性"UserName"被绑定.

我尝试使用参数名称"client"的操作方法,并将html名称属性格式化为"client [index] .PropertyName",但它不起作用.(如果我有一个"列表客户端",那么它会被填充)

谢谢.

小智 11

在MVC4中,您应该使用for循环而不是foreach来绑定您的集合.然后,模型绑定器将能够在您提交数据时填充模型.

@for (int i = 0; i < Model.RegionDistrictCity.Count; i++)
        {
            @Html.EditorFor(model => Model.RegionDistrictCity[i].Region)
        }
Run Code Online (Sandbox Code Playgroud)

但这只有在您没有动态删除或添加项目时才会起作用.如果你想这样做,你应该使用steve sanderson创建的BeginCollectionItem帮助器.http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/