【问题标题】:MVC Http Post Action With Variable Parameters具有可变参数的 MVC Http Post 操作
【发布时间】:2014-05-20 10:53:39
【问题描述】:

我目前正在实施的 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 方法,因为您需要知道键的名称才能检索值。我错过了什么明显的东西吗?

非常感谢。

【问题讨论】:

  • 如果您使用for (int i = 0; i &lt; Model.AccountMappings.Count(); i++) 而不是foreach,使用@Html.EditorFor(x=&gt;Model.AccountMappings[i]) 等将正常工作。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 漂亮!像魅力一样工作,非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
相关资源
最近更新 更多