1. 年齡選單
- 預設值為空白(代表全部年紀)
- 範圍 0 ~199
var ageList = new List<SelectListItem>(); ageList.Add(new SelectListItem { Text = "全部年紀", Value = "" }); ageList.AddRange(Enumerable.Range(0, 120).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(0, new 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(0, new 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();
沒有留言:
張貼留言