我在我的 View 中使用下拉列表助手,如下所示:

 @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;”处放置一个刹车点。行,调试器命中它,但是当我渲染 View 时,没有选择任何选项。我还在我的 View 中使用另一个 dropdownlistfor helper 以相同的方式填充下拉列表,但它会被选中。我真的不知道它有什么问题。如果有人知道请告诉我,我将不胜感激 =)

最佳答案

当使用以 SelectListItem 的 IEnumerable 作为参数的强类型 Html Helpers 时,这些项目的 selected 属性将被忽略。

当您在 GetPositions() 方法中设置 SelectListItem 的值时,您将 PlayerPosition 枚举转换为 int。我假设您的 View 模型中的 BasePlayerForm.Position 属性不是 int。如果您将 BasePlayerForm.Position 更改为 int,则应根据该属性设置所选项目。

关于c# - DropDownListFor 不是在 View 中而是在 View 模型中获取所选项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7244953/

10-17 02:22