我有一个模型,其中包含一个列表,我在表单中循环一些属性。 单击保存按钮以保存列表时,模型内的列表为空。
那么我如何获得带有值的列表?我希望得到所有选定的栏并处理它以保存哪个栏被添加到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)
}
}
答案 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/