POST表单,其中包含对象列表作为viewModel属性(不带ajax)

时间:2018-08-29 23:46:15

标签: c# asp.net-mvc razor

我有一个视图模型,它会像这样在cshtml视图中显示:

@model MyViewModel
<form action="...">
  @foreach (var item in this.Model.MyList)
  {
    <input type="checkbox" name="item.Name"/>
  }
</form>

然后我在后端有一个控制器方法:

[HttpPost]
public ActionResult SaveMyViewModel(MyViewModel viewModel)
{
...

在POST期间检查控制器方法中的viewModel时,它具有所有null属性。我希望它在MyList中有值,并且在那里MyList中每个项目都有布尔值。

没有Ajax,这可能吗?我不能在这里使用ajax。

为了正确地将viewModel的准确表示返回给服务器,必须对表单做些什么?

1 个答案:

答案 0 :(得分:0)

我假设您的button提交form<form> element中的HTML之内。

List (Array)中的Object的{​​{1}}从HTML张贴到Controller时,需要将List中每个项目的索引添加到HTML name property

此外,name property也应与Property代码中的C#具有相同的名称。

您的代码应如下所示才能正常工作。

<form action="...">
   @{ 
var i = 0; 
}
  @foreach (var item in this.Model.MyList)
  { var nameChecked = string.Empty; 
 if(item.Name != null) nameChecked = “checked”;
<input type="checkbox" name="viewModel[i].Name" @nameChecked  />
i++;
  }
</form>
  

注意:这是一个基本代码示例。您始终可以增强工作效率。

希望这会有所帮助!