Asp.NET:在提交表单时从模型中的对象列表中获取所有值

时间:2015-12-29 07:49:59

标签: c# asp.net-mvc

我有一个模型,其中包含一个列表,我在表单中循环一些属性。 单击保存按钮以保存列表时,模型内的列表为空。

那么我如何获得带有值的列表?我希望得到所有选定的栏并处理它以保存哪个栏被添加到Foo。

以下是我的示例代码。

视图模型:

public class FooViewModel
{
   public FooViewModel()
   {
      BarList = new List<BarViewModel>();
   }

   public List<BarViewModel> BarList { get; set; }
}

public class BarViewModel
{
   public string BarId { get; set; }
   public bool IsSelected { get; set; }
}

控制器:

public ActionResult AddBar(int id, string otherId)
{
   //omitted the codes
}

[HttpPost]
public ActionResult AddBar(int id, string otherId, FooViewModel model)
{
   //omitted the codes
}

查看:

@model FooViewModel

@using (Html.BeginForm("AddBar", "Foo", FormMethod.Post, new { role = "form", autocomplete = "off", enctype = "multipart/form-data" }))
{
    @foreach (var bar in Model.BarList)
    {
        @Html.HiddenFor(bar => bar.Id)
        @Html.CheckBoxFor(bar => bar.IsSelected)   
    }
}

1 个答案:

答案 0 :(得分:2)

您应该在BarList上更改周期,以使用for循环代替foreach

@for (var i = 0; i < Model.BarList.Length; i++ )
{
    @Html.HiddenFor(mdl => mdl.BarList[i].Id)
    @Html.CheckBoxFor(mdl => mdl.BarList[i].IsSelected)   
}

这样,正确的ID和名称将添加到<hidden><input>标记中,以便MVC能够对其进行正确的模型绑定。

您可以在Internet上阅读有关模型绑定和集合的更多信息,例如: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx