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