我在我的视图中使用了一个下拉列表帮助器:
@Html.DropDownListFor(m => m.BasePlayerForm.Position, Model.GetPositions())
我在模型中有一个填充列表的函数:
public IEnumerable<SelectListItem> GetPositions()
{
foreach (string positionValue in Enum.GetNames(typeof(PlayerPosition)))
{
var selectListItem = new SelectListItem();
selectListItem.Text = positionValue;
selectListItem.Value = ((int)Enum.Parse(typeof(PlayerPosition), positionValue)).ToString();
if (BasePlayerForm.Position.ToString() == positionValue)
selectListItem.Selected = true;
yield return selectListItem;
}
}
(我知道还有一个更短的版本,返回一个列表项,但出于调试目的,我发现这更有用。)有趣的是,如果我在“selectListItem.Selected = true”处设置一个制动点;行,调试器命中它,但是当我渲染视图时,没有选择任何选项。我也在我的视图中使用另一个dropdownlist for helper以相同的方式填充下拉列表,但是那个获取选定的项目。我真的不知道它的问题是什么。如果有人知道请告诉我,我会非常感激=)
答案 0 :(得分:2)
当使用以IEnumerable的SelectListItem作为参数的强类型Html Helpers时,将忽略这些项的selected属性。
当您在GetPositions()方法中设置SelectListItem的值时,您将PlayerPosition枚举转换为int。我假设视图模型中的BasePlayerForm.Position属性不是int。如果将BasePlayerForm.Position更改为int,则应根据该属性设置所选项目。
答案 1 :(得分:0)
您可以在属性中使用该代码而不是使用函数:
public IEnumerable<SelectListItem> ChangeMyName {
get {
foreach (string positionValue in Enum.GetNames(typeof(PlayerPosition)))
{
var selectListItem = new SelectListItem();
selectListItem.Text = positionValue;
selectListItem.Value = ((int)Enum.Parse(typeof(PlayerPosition), positionValue)).ToString();
if (BasePlayerForm.Position.ToString() == positionValue)
selectListItem.Selected = true;
ChangeMyName.Add(selectListItem);
}
set{return;}
}
然后,您可以这样称呼它:
@Html.DropDownListFor(m => m.BasePlayerForm.Position,new SelectList( Model.GetPositions)
我不确定这是否有帮助,但这将是我会尝试的。