【问题标题】:How to bind a list of complex objects to view model on post in mvc?如何将复杂对象列表绑定到 mvc 中的帖子上查看模型?
【发布时间】:2014-04-16 23:03:08
【问题描述】:

我正在视图上创建 x 个下拉列表,并希望将所选值绑定回发布时的视图模型。我看过 Scott 的 post 并尝试编写我的代码,但仍然无法正常工作。

我的视图模型由两个项目组成。一个用于下拉列表的名称标签,一个用于选定值。我需要选择的值,因为我需要预先选择下拉列表。

虚拟机

public class ColumnMapperVm
{
    public string Column { get; set; }
    public string SelectedValue { get; set; }
}

视图获取视图模型列表。原因是因为我不知道我在设计时需要拥有的下拉列表的数量。因用户而异。

@model List<ColumnMapperVm>

@for (int i = 0; i < Model.Count; i++ )
{
    <tr>
        <td style="width: 50%;">
            @Html.DisplayFor(m => m[i].Column)               
        </td>
        <td>
            @Html.DropDownList("SelectedValue", new SelectList(ViewBag.Columns, "StaticName", "DisplayName", Model[i].SelectedValue))
        </td>
    </tr>
}

我将选择列表放在一个视图包中,因为我想保留我的视图模型,而我不选择列表不会被发布回服务器。

这是我的控制器

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult MapColumns(List<ColumnMapperVm> colmapper)
    {
          //colmapper is null
    }

当然,我得到了 FormCollection 中的值,但是模型绑定器没有绑定视图模型,我想知道如何让它工作。

【问题讨论】:

    标签: c# asp.net asp.net-mvc razor model-binding


    【解决方案1】:

    一个可能的原因可能是,当前帖子上的所有下拉列表都将具有相同名称的值添加到请求中。要解决此问题,您可以使用 DropDownListFor:

    @Html.DropDownListFor(m => m[i].SelectedValue, new SelectList(ViewBag.Columns, "StaticName", "DisplayName"))
    

    这应该确保所有下拉菜单在 HTML 标记中都有正确的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多