1. 程式人生 > >Razor語法下拉框的實現

Razor語法下拉框的實現

Controller的資料繫結

//公共的方法
//在每次需要展示下拉框的時候,需要呼叫一下這個方法 【資料來源是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="請選擇商品分類"
               })