Html.DropDownListFor的選項值爲字符型問題

我快要瘋了。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?這明顯不符合常理,指望之後找到答案,或者有誰能告訴我一下。

相關文章
相關標籤/搜索