1. 年齡選單
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. 英文字母選單
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();