看起來這個問題被問了太多次。但是這讓我瘋狂。未在MVC4中的DropDownListFor()上設置的選定值
這是我的(簡化)模型。
public class UserEditModel
{
[Required]
public string Title { get; set; }
private IEnumerable<SelectListItem> _titleList;
public IEnumerable<SelectListItem> TitleList
{
get { return _titleList.Select(x => new SelectListItem {
Selected = (x.Value == Title),
Text = x.Text,
Value = x.Value
});
}
set { _titleList = value; }
}
}
的Text
和Value
在TitleList
構件每個SelectListItem
的性質是相同的。例如:
new SelectListItem { Text = "Mr", Value = "Mr" }
當下面的代碼是張貼,正確Title
值被綁定到模型,但每當該模型被推向視圖響應於POST或GET,所選擇的值不設置在下拉列表中,即使所有intellisense都顯示出正確的值。
@Html.DropDownListFor(x => x.Title, Model.TitleList)
我已經確保基於幾篇文章和幾個SO答案的代碼是正確的,所以我很難過。
有什麼建議嗎?
更新:
爲了完整,這是操作和支持方法:
[HttpGet]
public ActionResult Edit(int id)
{
var user = _userService.Get(id);
var model = new UserEditModel()
{
...
Title = user.Title,
TitleList = ListTitles()
};
return View(model);
}
private IEnumerable<SelectListItem> ListTitles()
{
var items = new[] {
new SelectListItem() {Text = "Mr", Value = "Mr" },
new SelectListItem() {Text = "Mrs", Value = "Mrs"},
new SelectListItem() {Text = "Ms", Value = "Ms"},
new SelectListItem() {Text = "Miss", Value = "Miss"},
new SelectListItem() {Text = "Professor", Value = "Professor"},
new SelectListItem() {Text = "Dr", Value = "Dr" }
};
return items;
}
正如你看到的沒有什麼特別的,只是一個簡單的實現。
在您返回視圖之前嘗試添加'ModelState.Clear()'。 – mattytommo
@mattytommo我爲什麼需要這樣做?你能把它作爲答案嗎? – Digbyswift
看到我的答案,那就是爲什麼:) – mattytommo