3

我有一个场景,我想从复选框列表中选择 3 个项目。这很好用,但如果复选框列表变长,页面看起来很笨拙。所以我想将其更改为 3 个下拉列表。所以页面要小得多,但没有一个下拉列表尊重所选值。

所以我尝试了这样的代码

@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 0 ? Model.CheckedLarcenyTypes[0] : null as Int32?), String.Empty, new { id = "Larceny1" })
@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 1 ? Model.CheckedLarcenyTypes[1] : null as Int32?), String.Empty, new { id = "Larceny2" })
@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 2 ? Model.CheckedLarcenyTypes[2] : null as Int32?), String.Empty, new { id = "Larceny3" })

现在下拉菜单已正确创建,并且正确的值正在绑定,并且在 POST 上,我看到值在视图模型中被发回。

我只是无法让选择值显示在下拉列表中。重新加载页面后,下拉菜单仍然是空白的。

我在这里做错了什么?这甚至可能吗?

4

1 回答 1

2

您的问题与此处描述的内容有关。

阅读选择

如果您在回发期间使用相同的模型来接受来自编辑视图的输入,您可能会认为默认模型绑定器将使用所有专辑信息重新填充专辑集合并设置选定的专辑。不幸的是 - 网络无法以这种方式工作,并且相册集合将为空。

所以你必须有一个这样的 ViewModel:

public class LarcenyViewModel
{
    public int CheckedLarcenyType1 { get; set; }
    public int CheckedLarcenyType2 { get; set; }
    public int CheckedLarcenyType3 { get; set; }             
    public IEnumerable<SelectListItem> LarcenyTypes { get; set; }
}

像这样填充 ViewModel:

LarcenyViewModel larcenyViewModel = new LarcenyViewModel();

// Use a database, enum or whatever to get the LarcenyTypes... :)
larcenyViewModel.LarcenyTypes = new SelectList(
               database.FindAllLarcenyTypes(), "LarcenyId", "Name");

查看代码:

@Html.DropDownListFor(model => model.CheckedLarcenyType1, Model.LarcenyTypes, String.Empty, new { id = "Larceny1" })
@Html.DropDownListFor(model => model.CheckedLarcenyType2, Model.LarcenyTypes, String.Empty, new { id = "Larceny2" })
@Html.DropDownListFor(model => model.CheckedLarcenyType3, Model.LarcenyTypes, String.Empty, new { id = "Larceny3" })
于 2013-02-06T19:37:36.607 回答