在ASP.NET MVC中可以用DropDownListFor的方式來讓用戶選擇已定列表中的一個數值。
注:重點是要將DropDownList的數據源轉換成IEnumerable<SelectListItem>類型的結合;
SelectListItem類在System.Web.MVC命名空間下,其成員如下:
- public bool Disabled { get; set; }
- public SelectListGroup Group { get; set; }
- public bool Selected { get; set; }
- public string Text { get; set; }
- public string Value { get; set; }
1 //處理State,將IEnumerable<State>集合轉換為IEnumerable<SelectListItem>集合 2 public IEnumerable<SelectListItem> GetStates() 3 { 4 return _usStateService.GetStates().OrderBy(c => c.StateAbbreviation).Select(state => new SelectListItem 5 { 6 Text = state.StateAbbreviation, 7 Value = state.StateAbbreviation 8 }); 9 }
使用如下示例:
- 首先我們要定義一個Model,用戶在DropDownList中選擇指定的值付給屬性ReadyTimeHour
1 public class EricSunModel 2 { 3 public string ReadyTimeHour { get; set; } 4 }
- Model定義完畢之后,接下來處理Controller的邏輯
- 這里使用ViewData來記錄DropDownList中所要顯示的所有列表數值
1 public ActionResult EricSunAction() 2 { 3 EricSunModel esModel = new EricSunModel(); 4 esModel.ReadyTimeHour = "00"; 5 6 GenerateReadyTimeViewData(); 7 8 return View(esModel); 9 } 10 11 private void GenerateReadyTimeViewData() 12 { 13 ViewData["HourList"] = GetTimeHourList(); 14 } 15 16 //這里要對集合進行處理,因為第二個參數必須是IEnumerable<SelectListItem> 類型的集合 17 private List<SelectListItem> GetTimeHourList() 18 { 19 List<SelectListItem> hourList = new List<SelectListItem>(); 20 21 for (int i = 0; i < 24; i++) 22 { 23 if (i < 10) 24 { 25 hourList.Add(new SelectListItem { Text = "0" + i.ToString(), Value = "0" + i.ToString() }); 26 } 27 else 28 { 29 hourList.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString() }); 30 } 31 } 32 33 return hourList; 34 }
- 接下來我們在View中可以用下面一行代碼來綁定DropDownList
- 注:第一個參數為綁定Model中的屬性,即-->要為此屬性賦值
- 注:第二個參數為DropDownList的所有數據源,並且必須是IEnumerable<SelectListItem>類型的集合
1 @Html.DropDownListFor(m => m.ReadyTimeHour, ViewData["HourList"] as List<SelectListItem>)
- 效果如下
- 如果我們想在DropDownList中的最頂端添加一個默認值的話,添加第三個參數
1 @Html.DropDownListFor(m => m.ReadyTimeHour, ViewData["HourList"] as List<SelectListItem>, "---Select---")