未在SelectListItems的SelectList的DropDownListFor中选择的选定值

时间:2016-01-27 13:38:34

标签: c# asp.net-mvc html.dropdownlistfor selectlist selectlistitem

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)

1 个答案:

答案 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); ,那么首次渲染视图时将会选择该选项。