我快要瘋了。asp.net mvc的這個DropDownListFor,不管在服務器端如何設置,設置哪一個值被選中,結果到了頁面輸出,選中值根本沒有被選中,沒有任何一個值被選中,下拉框只冷冰冰地顯示一個「–請選擇–」。php
強調一下,若是對於 value 是數值型,而text是字符型來講,不存在以上問題;但若是value 和 text ,都是字符型,問題就像開頭描述的那樣。前端
我靠,太玄乎了吧。服務器
花了好長時間,累到差點虛脫,我都懷疑本身是否是太老,再也不適合搞開發了。連這種簡單的問題都搞不定,說不過去啊。markdown
後來發現:
一、服務器端設置哪一個值被選中,或者默認值是啥,對於 DropDownListFor 不起做用,它會根據綁定的屬性自動匹配;對 DropDownList 有做用;
好比:mvc
public enum EYJStatus
{
[EnumTitle("解除")]
解除,
[EnumTitle("藍色")]
藍色,
[EnumTitle("黃色")]
黃色,
[EnumTitle("橙色")]
橙色,
[EnumTitle("紅色")]
紅色
}
不管是在服務器端指定默認值
var yjStatus = new SelectList(EnumHelper.GetItemKeyList<EYJStatus>().Select(s => s.ToString()).ToList(),"藍色");
仍是不指定
var yjStatus = new SelectList(EnumHelper.GetItemKeyList<EYJStatus>().Select(s => s.ToString()).ToList());
而後
ViewData.Add("STATE", yjStatus);
在前端,都沒有影響:
@Html.DropDownListFor(m => m.STATE, null, "--請選擇--", new { })
二、對於DropDownListFor,其參數 IEnumerable selectList,彷佛只能設置成null,而後由系統自動對應到ViewData[「屬性名」],經過這種方式才能起做用。好比:asp.net
var yjStatus = new SelectList(EnumHelper.GetItemKeyList<EYJStatus>().Select(s => s.ToString()).ToList());
ViewData.Add("STATE", yjStatus);
//有效
@Html.DropDownListFor(m => m.STATE, null, "--請選擇--", new { })
//無效
@Html.DropDownListFor(m => m.STATE, ViewData["STATE"] as IEnumerable<SelectListItem>, "--請選擇--", new { })
三、DropDownListFor 會設置 IEnumerable selectList 的值
好比:spa
//服務器端
var yjStatus = EnumHelper.GetItemKeyList<EYJStatus>().Select(s => new SelectListItem()
{
Text = s.ToString(),
Value = s.ToString(),
Selected = (s.ToString() == "藍色") ? true : false
}).ToList();
ViewData.Add("STATE", yjStatus);
//前端
@Html.DropDownListFor(m => m.STATE, null, "--請選擇--", new { })
@Html.DropDownList("STATE2", ViewData["STATE"] as IEnumerable<SelectListItem>, "--請選擇--", new { })
結果第二個下拉框的默認值再也不是「藍色」,有多是其餘值;假如將兩個下拉框調換一下位置:.net
@Html.DropDownList("STATE2", ViewData["STATE"] as IEnumerable<SelectListItem>, "--請選擇--", new { })
@Html.DropDownListFor(m => m.STATE, null, "--請選擇--", new { })
則處於前面的下拉框永遠顯示「藍色」。code
若是能讀一下asp.net mvc的相關源代碼,應該能夠明瞭箇中緣由吧。不過,要讀懂並不是易事,即便讀懂,也改變了什麼。coffeescript
把時間花在這種應用型的處理辦法上,真窩囊。但又不能不處理。再有,參數 IEnumerable selectList 必定要設置成null?這明顯不符合常理,指望之後找到答案,或者有誰能告訴我一下。