私のサイトには、多数の言語を含むドロップダウンがあります。ユーザーが別の言語を選択すると、ページのテキストがその言語で再読み込みされます。選択した言語の選択したインデックスを指定して、それを反映するように言語ドロップダウンを変更したいと思います。ただし、これを行うたびに、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)
スウェーデン語の Selected プロパティが SelectListItem で 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;
}