【问题标题】:Selected Value not selected in a DropDownListFor of SelectList of SelectListItemsSelectListItems 的 SelectList 的 DropDownListFor 中未选择的选定值
【发布时间】:2016-01-27 13:38:33
【问题描述】:

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)

【问题讨论】:

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


    【解决方案1】:

    设置SelectListItemSelected 属性会被DropDownListFor() 方法忽略。在内部,该方法使用现有SelectListText 属性的Value 构建一个新的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",那么当您第一次渲染视图时将选择该选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多