0

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 的选择选项的地方!

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

1 回答 1

0

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

从你的第一个创建第二个相同的也没有意义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"那么当您第一次渲染视图时将选择该选项。

于 2016-01-27T21:50:56.963 回答