具有可变参数的MVC Http Post Action

时间:2014-05-20 10:53:39

标签: c# asp.net-mvc razor http-post

我目前正在实施的MVC操作存在一些问题。简单地说,我有一个用户表,其中分配了角色。每个用户的角色数量可以从1-3开始,我不知道如何在编辑它们时在MVC的POST操作中反映这一点。为了将角色放入视图中,我使用了包含角色名称和ID的类AccountMapping列表:

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方法,因为您需要知道键的名称才能检索值。我错过了一些明显的东西吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

扩展我的评论,如果您使用索引而不是foreach,那么它可以正确地命名并将集合中的各个项目映射回已发布的输入集合。 e.g:

 @for (int i = 0; i < Model.AccountMappings.Count(); i++)
 {
      <div>
          @Html.EditorFor(x=>Model.AccountMappings[i])
      </div>                             
 }

如果查看生成的HTML,您将看到输入根据其索引位置唯一命名。

这些将自动映射回接收集合(假设您的回发采用与传递给视图的视图模型相同的对象类型)。