繁体   English   中英

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

[英]Asp.NET: Get all of the values from the list of object in a model when submitting a form

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

那么我将如何获取带有值的列表? 我想获取所有选定的栏并进行处理,以保存将哪些栏添加到Foo中。

这是我的示例代码。

ViewModel:

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)   
    }
}

您应该在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM