2014年8月5日 星期二

Html.DropDownList 應用

1. 年齡選單

  • 預設值為空白(代表全部年紀)
  • 範圍 0 ~199
var ageList = new List<SelectListItem>();
ageList.Add(new SelectListItem { Text = "全部年紀", Value = "" });
ageList.AddRange(Enumerable.Range(0120).Select(x => new SelectListItem { Text = x.ToString(), Value = x.ToString() }));
ViewBag.age = new SelectList(ageList, "Value""Text", age);

頁面 :
@Html.DropDownList("age")

2. 英文字母選單

  • 預設值為空白(代表全部字母)
  • 範圍 A ~Z
var selectListAzItem = new List<SelectListItem>();
selectListAzItem.Add(new SelectListItem { Text = "字母", Value = "" });
selectListAzItem.AddRange(Enumerable.Range('A'26).Select(x => new SelectListItem { Text = ((char)x).ToString(), Value = ((char)x).ToString() }));
ViewBag.az = new SelectList(selectListAzItem, "Value""Text", az);

3. 自定內容

List<SelectListItem> ratingSorting = new List<SelectListItem>
{
    new SelectListItem{Text= "全部評分",Value= ""},
    new SelectListItem{Text= "沒有評分",Value= "0"},
    new SelectListItem{Text="有評分",Value= "1"}
};
ViewBag.rating = new SelectList(ratingSorting, "Value""Text", rating);

4. 從資料庫撈取資料

    客製化
  • 插入自定的資料到頂部當成預設資料
var locationList = _db.Location.OrderBy(x => x.Id).Select(x => new SelectListItem {
    Text = x.Name,
    Value = x.Id.ToString(),
}).ToList(); // 最後沒有 ToList() 則會得到型別為 IEnumerable<SelectListItem>, 只有 List 型別才能用 Insert 方法
locationList.Insert(0new SelectListItem { Text = "全部地區" });
ViewBag.location = new SelectList(locationList, "Value""Text", location);

    直接使用

  • 資料表欄位Id當Select的Vaule
  • 資料表欄位Name當Select當Text

ViewBag.location = new SelectList(_db.Location, "Id""Name");
     

5. 使用Enum

var reportTypeList = Enum.GetValues(typeof(ReportType)).Cast<ReportType>().Select(v => new SelectListItem
{
    Text = v.ToString(),
    Value = ((int)v).ToString()
}).ToList();
reportTypeList.Insert(0new SelectListItem { Text = "全部" });
ViewBag.reportType = new SelectList(reportTypeList, "Value""Text", reportType);

如果範例中的 enum ReportType 有 DiplayName, 並想要使用 DisplayName 做 Text 名稱
public enum ReportType
{
    [Display(Name = "訊息報錯")]
    Error,
    [Display(Name = "補充電影資料")] 
    Movie,
    [Display(Name = "回報問題")] 
    Problem,
    [Display(Name = "網站Bug修復")] 
    Bug,
    [Display(Name = "其他")]
    Other,
}

先做一個 function 來取她的 DiplayName
public string GetReportTypeDisplayName(ReportType value)
{
    var type = value.GetType();
    var members = type.GetMember(value.ToString());
    var member = members[0];
    var displayAttributes = member.GetCustomAttributes(typeof(DisplayAttribute), false);
    var displayAttribute = (DisplayAttribute)displayAttributes.FirstOrDefault();
    return displayAttribute == null ? value.ToString() : displayAttribute.GetName();
}

在 Select 出 SelectListem 時, 使用自定的方法
Text = GetReportTypeDisplayName(v),


=========================

頁面上抓取 selected 數值

string ageSelected = ((SelectList)ViewBag.age).Where(x => x.Selected).Select(x => x.Value).FirstOrDefault();






沒有留言: