【问题标题】:ASP.NET MVC 4 - DropDown selected value doesn't workASP.NET MVC 4 - 下拉选择的值不起作用
【发布时间】:2016-01-23 23:23:32
【问题描述】:

在我的 ViewModel 中,我有两个字段:

public AdTypeEnum Type { get; set; }
public IList<SelectListItem> TypeEnumList { get; set; }

这就是我填写列表的方式:

public void SetLists()
{
    TypeEnumList = new List<SelectListItem>();
    TypeEnumList.Add(new SelectListItem { Value = "0", Text = "Select the type"});

    foreach (var en in Enum.GetValues(typeof(AdTypeEnum)).Cast<AdTypeEnum>())
    {
        TypeEnumList.Add(new SelectListItem 
        { 
            Value = ((int)en).ToString(), 
            Text = en.ToString(), 
            Selected = Type == (AdTypeEnum)en ? true : false
        });
    }
}

然后我只是在我的视图上呈现一个下拉列表:

@Html.DropDownListFor(x => x.Type, Model.TypeEnumList, new { @class = "form-control" })

但所选值不会呈现,并且始终选择第一个选项。当我检查 HTML 中的选择时,我发现没有一个选项具有选定属性,但是当我调试我的控制器方法时,我可以看到始终有一个 selectListItem 具有属性 Selected=true。为什么我的视图在渲染时突然消失了?

【问题讨论】:

  • 您可以尝试添加一个默认值:stackoverflow.com/questions/7229626/…
  • 什么意思?我正确填充了 List,总是有一个元素得到 Selected=true,但神奇的是,视图上没有一个选项具有 selected 属性:/ 这就是我想要弄清楚的
  • 您没有正确填充SelectList。不要添加第一个选项(使用value="0')) - 您使用正确的重载添加标签选项 - @Html.DropDownListFor(x =&gt; x.Type, Model.TypeEnumList, "Select the type", new { .. }) 生成 null 值。在循环中,它应该是Value = en.ToString(),,最后,在绑定到属性时设置SelectListItemSelected 属性是没有意义的。它的值Type 决定选择哪个选项(Selected 属性被DropDownListFor() 方法忽略

标签: c# asp.net-mvc dropdown


【解决方案1】:

好的,我已经知道结果了。我只需要将类型从 Enum 更改为 int 并正确填充它。一切正常! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多