MVC 中的下拉框 實現方式,下面為大家介紹一個我自己認為比較好用的實現方式,而二話不說直接上代碼:
第一步: 后台代碼
//公共的方法 //在每次需要展示下拉框的時候,需要調用一下這個方法 【數據源是DB數據庫】 private void _ProductExtensions( BtDbContext _ctx ) { #region 商品分類 List<SelectListItem> listProductTypes = new List<SelectListItem>(); listProductTypes.Add(new SelectListItem() { Text = "商品分類", Value = "0" }); //直接查詢數據庫中的數據,將其綁定到list中 listProductTypes.AddRange(_ctx.ProductTypes.Select(t => new SelectListItem() { Text = t.TypeName, Value = t.TypeId.ToString() }).ToList()); ViewData["ProductTypes"] = listProductTypes; #endregion }
//枚舉的創建
/// <summary>
/// 本系統訂單狀態
/// </summary>
[Serializable]
[ProtoContract]
[Description("訂單狀態")]
public enum OrderStatus
{
/// <summary>
/// 全部
/// </summary>
[Description("全部")]
[ProtoEnum(Value = 0)]
NoSetting = 0,
/// <summary>
/// 未派單
/// </summary>
[Description("未派單")]
[ProtoEnum(Value = 1)]
NoSendOrder = 1,
}
//調用的方式同上,唯一不同的是數據源 這里使用的數據源是 來自枚舉
private void _OrderExtensions() { #region 訂單狀態 Dictionary<string, int> dic = new Dictionary<string, int>(); dic = typeof(EnumHelper.OrderStatus).ToDictionary(); //這個ToDictionary()是自己擴展的一個方法 List<SelectListItem> listOrderState = new List<SelectListItem>(); listOrderState.Add(new SelectListItem() { Text = "訂單狀態", Value = "" }); foreach (var item in dic) { listOrderState.Add(new SelectListItem() { Text = item.Key, Value = item.Value.ToString() }); } ViewData["OrderStates"] = listOrderState; #endregion }
補充擴展方法:
public static Dictionary<string, int> ToDictionary(this Type type) { Dictionary<string, int> dic = new Dictionary<string, int>(); foreach (var e in Enum.GetValues(type)) { var des = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault<object>() as DescriptionAttribute; string key = e.ToString(); if (des != null) { key = des.Description; } dic.Add(key, (int)e); } return dic; }
第二步:前端調用
@{ //商品分類 初始加載 List<SelectListItem> listProductTypes = ViewData["ProductTypes"] as List<SelectListItem>; }
//直接在MVC 標簽中調用就ok了
@Html.DropDownList("TypeId", listProductTypes, new
{
datatype=@"/^[1-9]+$/",
sucmsg=" ",
nullmsg="請選擇商品分類",
errormsg="請選擇商品分類"
})
第三步:展示結果:
1、讀取DB 數據源的樣式
2、讀取枚舉的樣式圖