DropDownListFor选择一个项目并将其选中

时间:2018-07-12 12:44:02

标签: c# asp.net-mvc

我正在生成一个语言下拉列表。我想将该列表中的特定项目设为selected。这是查看页面代码:

@{var languageList = new List<SelectListItem>();
    var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

    foreach (var culture in cultures)
    {
        if(culture.NativeName != "Invariant Language (Invariant Country)")
        {
            languageList.Add(new SelectListItem {
                Text = (culture.EnglishName != culture.NativeName) ?
                       culture.EnglishName + " - " + culture.NativeName :
                       culture.EnglishName,
                Value = culture.EnglishName.Contains('(') ?
                        culture.EnglishName.Split('(')[0].ToString().Trim() :
                        culture.EnglishName
            });
        }
    }
    languageList.OrderBy(x => x.Value);  
}  

现在,如果我这样调用该列表:

@Html.DropDownListFor(m => m.Language, languageList, "English", new { @class = "form-control" })  

然后它将不会选择English值。它将简单地创建一个值为English的新文本null并将其设置在列表的顶部。当我们想使用类似--Select Item--的东西时,这很好。但是我想选择该特定项目,其值为English,文本为English (United States)。我该怎么办?

3 个答案:

答案 0 :(得分:1)

在填充列表时设置所选项目:

var defaultListItem = new SelectListItem()
{
    Text = "English (United States)",
    Value = "English",
    Selected = true
};
languageList.Add(defaultListItem);

因此您无需在HTML帮助器中指定选定内容。

@Html.DropDownListFor(m => m.Language, languageList, new { @class = "form-control" })

这将生成一个类似于以下内容的选项:

<option selected="selected" value="English">English (United States)</option>

答案 1 :(得分:1)

languageList.Add(new SelectListItem
{
    Text = (culture.EnglishName != culture.NativeName) ?
            culture.EnglishName + " - " + culture.NativeName : culture.EnglishName,
    Value = culture.EnglishName.Contains('(') ?culture.EnglishName.Split('(')0].ToString().Trim() : culture.EnglishName,
    Selected = (culture.EnglishName == "English (United States)") ? true : false
});

您也可以使用derloopkat的解决方案。

答案 2 :(得分:0)

您当前使用的是错误的DropDownListFor重载,如果没有选择的值是空的,那么您设置的“英语”是默认值。解决此问题的一种方法是在SelectList中设置值:

@Html.DropDownListFor(m => m.Language, new SelectList(languageList, "Value", "Text", "English") ,new { @class = "form-control" })

尽管这可能会导致选择任何值为“英语”的项目。