我的网站上有一个下拉菜单,其中包含多种语言。当用户选择不同的语言时,页面文本会重新加载为该语言。我希望通过指定所选语言的所选索引来更改语言下拉菜单以反映这一点。但是,当我这样做时,HTML 中的下拉菜单不会更改,并且始终显示列表中的第一项。
我有以下 ViewModel :
public class BaseViewModel
{
public BaseViewModel()
{
}
public IEnumerable<SelectListItem> LanguageSelectListItems { get; set; }
}
当我构造一个 SelectListItems 列表时,LanguageSelectListItems 属性已成功填充。当这被传递到视图中时,所选语言 SelectListItem 设置为 true - 在本例中为瑞典语。到目前为止一切都很好。
但是当视图调用 Html.DropDownList() 时,所选语言的 selected 属性更改为 false。几张图片可能会更好地解释这一点。
打电话之前@Html.DropDownList("language", Model.LanguageSelectListItems)
之后立马@Html.DropDownList("language", Model.LanguageSelectListItems)
您可以看到 SelectListItem 上瑞典语的 Selected 属性已更改为 false,这是生成的 HTML:
<select name="language" id="language">
<option value="2">English</option>
<option value="3">Finnish</option>
<option value="4">Swedish</option>
</select>
任何想法为什么会发生这种情况?
编辑:正在填充 LanguageSelectListItems 并使用此函数设置所选语言(其中languages
是 的可枚举language
):
public static IEnumerable<SelectListItem> GetLanguageList(int selectedIndex)
{
var selectListItems = new List<SelectListItem>();
foreach (var language in languages)
{
selectListItems.Add(new SelectListItem() { Text = language.Name, Value = language.Id });
}
if (selectedIndex >= 0)
{
selectListItems[selectedIndex].Selected = true;
}
return selectedListItems;
}