带有可变参数的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方法,因为您需要知道键的名称才能检索值。我错过了什么明显的东西吗?

许多谢谢。

带有可变参数的MVC Http Post Action

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

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

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

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