未在 SelectListItem 上的 SelectList 的 DropDownListFor 中选择选定值

Selected Value not selected in a DropDownListFor of SelectList of SelectListItems

DropDownListFor 没有 selecting 我指定的 SelectListItem 应该 selected。无法弄清楚为什么所有参数似乎都是正确的。

ViewModel:

public class SchemesViewModel
{
    public int SchemeId { get; set; }
    public SelectList Schemes { get; set; }
}

控制器(select列表准备):

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 选项未被 select 编辑的地方!

 @Html.DropDownListFor(x => x.SchemeId, Model.Schemes)

设置 SelectListItemSelected 属性 被 DropDownListFor() 方法忽略。在内部,该方法使用现有 SelectListValueText 属性构建新的 IEnumerable<SelectListItem>,并根据 Selected 属性您绑定到的 属性 的值。在将模型传递给视图之前,您需要设置 SchemeId 的值。

从第一个 SelectList 创建第二个相同的 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);

现在,如果您的其中一个选项有 value="2",那么当您第一次渲染视图时将选择该选项。