我正在生成一个语言下拉列表。我想将该列表中的特定项目设为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)
。我该怎么办?
答案 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" })
尽管这可能会导致选择任何值为“英语”的项目。