带有可变参数的MVC Http Post Action
本文关键字:MVC Http Post Action 参数 变参 | 更新日期: 2023-09-27 18:04:24
我有一点问题与MVC的行动,我目前正在实施。简单地说,我有一个用户表,其中包含分配给他们的角色。每个用户的角色数量可以从1-3不等,我不确定如何在编辑它们时在MVC的POST动作中反映这一点。为了让角色进入视图,我使用了一个类AccountMapping列表,其中包含角色名称和ID:
public ActionResult EditUser(User user, EditUserModel model)
{
// Omitted model assignments
model.AccountMappings = _reportUsersRepository.GetAccountMapping(user.UserId).ToList();
return View(model);
}
在视图中(使用Razor):
@foreach (var item in @Model.AccountMappings)
{
<div>
<p>@item.Target_Type.Replace('_', ' ')</p>
<input name="@item.Role_Name" value="@item.Target_Id" type="number" placeholder="Role Id" required />
</div>
}
我该如何构建POST操作来考虑这些输入?我对POST操作使用相同的模型,并且我知道AccountMapping列表在回发时不包含任何结果。我不确定是否使用FormsCollection方法,因为您需要知道键的名称才能检索值。我错过了什么明显的东西吗?
许多谢谢。扩展我的评论,如果您使用索引而不是foreach
,那么它可以正确命名并将集合中的单个项目映射回发布的输入集合。例如:
@for (int i = 0; i < Model.AccountMappings.Count(); i++)
{
<div>
@Html.EditorFor(x=>Model.AccountMappings[i])
</div>
}
如果您查看生成的HTML,您将看到输入是根据其索引位置唯一命名的。
这些将被自动映射回接收集合(假设您的回发采用与传递给视图的视图模型相同的对象类型)。