繁体   English   中英

如何绑定复杂对象列表以在mvc中查看帖子上的模型?

[英]How to bind a list of complex objects to view model on post in mvc?

我在视图上创建x个下拉列表,并希望将所选值绑定回post上的视图模型。 我看过斯科特的帖子并尝试编写我的代码,但仍无法使其工作。

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

VM

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>
}

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

这是我的控制器

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

当然,我在FormCollection中获取了值,但模型绑定器没有绑定视图模型,我想知道如何使它工作。

一个可能的原因可能是,当前所有下载后添加值都与请求具有相同的名称。 要解决这个问题,可以使用DropDownListFor

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

这应确保所有下拉列表在HTML标记中具有正确的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM