我在视图上创建x个下拉列表,并希望将所选值绑定回post上的视图模型。我见过Scott的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中获取了值,但是模型绑定器没有绑定视图模型,我想知道如何使它工作。
答案 0 :(得分:3)
一个可能的原因可能是,当前所有下拉列表都会为请求添加具有相同名称的值。要解决此问题,您可以使用DropDownListFor
:
@Html.DropDownListFor(m => m[i].SelectedValue, new SelectList(ViewBag.Columns, "StaticName", "DisplayName"))
这应确保所有下拉列表都在HTML标记中具有正确的名称。