DropDownListFor未选择应指定我指定的SelectListItem。无法弄清楚为什么所有参数看起来都是正确的。
视图模型:
public class SchemesViewModel
{
public int SchemeId { get; set; }
public SelectList Schemes { get; set; }
}
控制器(选择列表准备):
var schemes = schemeManager.GetUserSchemes(this.UserId);
var selectListItems = schemes.Select(x => new SelectListItem() { Value = x.Id.ToString(), Text = x.Name, Selected = (x.Id == 2) });
var vm = new UserSchemesViewModel()
{
Schemes = new SelectList(selectListItems, "Value", "Text", selectedValue: selectListItems.FirstOrDefault(x => x.Selected == true).Value)
};
return PartialView("_UserSchemes", vm);
查看:
注意:这是未选择值为2的select选项的地方!
@Html.DropDownListFor(x => x.SchemeId, Model.Schemes)
答案 0 :(得分:0)
Selected
方法忽略设置SelectListItem
DropDownListFor()
属性。在内部,该方法使用现有IEnumerable<SelectListItem>
的{{1}} Value
个属性构建新的Text
,并根据属性值设置新的SelectList
属性绑定到。在将模型传递给视图之前,需要设置Selected
的值。
也没有必要从你的第一个创建第二个相同的SchemeId
(它只是不必要的额外开销)。
将代码修改为
SelectList
控制器
public class SchemesViewModel
{
public int SchemeId { get; set; }
public IEnumerable<SelectListItem> Schemes { get; set; }
}
现在,如果您的某个选项中有var schemes = schemeManager.GetUserSchemes(this.UserId);
var selectListItems = schemes.Select(x => new SelectListItem()
{
Value = x.Id.ToString(),
Text = x.Name
});
var vm = new UserSchemesViewModel()
{
Schemes = selectListItems,
SchemeId = 2
};
return PartialView("_UserSchemes", vm);
,那么首次渲染视图时将会选择该选项。