我有一个场景,我想从复选框列表中选择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上我看到在视图模型中返回的值。
我无法让selectvalue显示在下拉列表中。重新加载页面后,下拉列表仍然是空白的。
我在这里做错了什么?这甚至可能吗?
答案 0 :(得分:2)
您的问题与here所述内容有关。
阅读选择
如果您使用相同的模型接受编辑视图中的输入 在回发期间,您可能会认为默认的模型绑定器会 使用所有相册信息重新填充Albums集合 设置所选专辑。不幸的是 - 网络不能以这种方式工作 并且相册集合将为空。
所以你必须有这样的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" })