Razor語法下拉框的實現
阿新 • • 發佈:2018-12-27
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="請選擇商品分類"
})