There is no ViewData item of type 'IEnumerable<SelectListItem>'
that has the key 'AppCurrentLanguage'.
@Html.DropDownListFor(m => m.AppCurrentLanguage, Model.LanguageList, ...) 要求:
Model.LanguageList 必須是 IEnumerable<SelectListItem> 且**非 null**。Model.AppCurrentLanguage 必須有值(用於預選),否則下拉框無默認選中項。控制器 GetLanguage() 中:
var model = new HomeIndexView {
LanguageList = this.RetrieveLanguagesList()
};
return View(model); // AppCurrentLanguage 未賦值!
導致 Model.AppCurrentLanguage == null,MVC 嘗試在 ViewData 中尋找同名鍵值失敗拋錯。
public ActionResult GetLanguage() {
var model = new HomeIndexView {
LanguageList = RetrieveLanguagesList(),
AppCurrentLanguage = "zh-CN" // 設置默認語言代碼,或從 Cookie/Session 讀取
};
return View(model);
}
public List<SelectListItem> RetrieveLanguagesList() {
var list = new List<SelectListItem>();
var langs = uow.AppLanguage.GetAll().ToList();
if (langs != null) {
foreach (var lang in langs) {
list.Add(new SelectListItem {
Text = lang.LanguageName,
Value = lang.LanguageCode
});
}
}
return list; // 確保不返回 null
}
@{
var langList = Model.LanguageList ?? new List<SelectListItem>();
var currentLang = Model.AppCurrentLanguage ?? "zh-CN";
}
@Html.DropDownListFor(m => m.AppCurrentLanguage, langList,
new { id = "appLanguage", name = "appLanguage", tabindex = "0" })
RetrieveLanguagesList() 返回 List<SelectListItem> 且非 null。LanguageList 和 AppCurrentLanguage。MVC DropDownListFor 報缺少 ViewData 鍵,實為 **Model 屬性未初始化**(AppCurrentLanguage 為 null)導致框架嘗試回退 ViewData 失敗。控制器構建 Model 時**完整賦值所有屬性**,視圖加防禦性判斷,即可解決。