POST 窗体,其中包含对象列表作为视图模型属性(不带 ajax)



我有一个视图模型,它显示在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。

必须对窗体执行哪些操作才能将视图模型的准确表示形式正确返回给服务器?

我假设您提交formbuttonHTML<form> element范围内。

当您将ObjectList (Array)HTML发布到Controller时,您需要将List中每个项目的索引添加到HTML name property

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

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

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

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

希望这有帮助!

最新更新