您好,登錄后才能下訂單哦!
今天遇到的問題是這樣的,我需要把一個枚舉綁定到View(項目使用了ASP.NET MVC框架)上的下拉列表控件。
為了說明這個問題,先準備了一段代碼,聲明一個枚舉,用來在頁面上進行綁定
using System.ComponentModel; namespace MvcApplication1.Views.Home { enum EnumExample { [Description("a")] a = 1, [Description("b")] b = 2, [Description("c")] c = 3, } }
其實只是綁定這個枚舉,還是挺簡單的,首先向動態字典ViewBag里添加數據
ViewBag.EnumExampleData = from EnumExample p in Enum.GetValues(typeof(EnumExample)) select new SelectListItem { Text = p.ToString(), Value = Convert.ToInt32(p).ToString() };
然后在頁面上用
@Html.DropDownListFor(p=>p.EnumExample,(IEnumerable<SelectListItem>)ViewBag.EnumExampleData)
就可以生成一個下拉列表控件了
但是這跟實際項目中的要求還稍有點兒差距,一般我們以枚舉作為狀態值或者屬性值時,進行某些操作時,比如查詢,有可能需要這個值為空(查所有狀態),所以我們還需要在下拉控件中增加一個“請選擇”或者“所有值”的項。
當然實現的方式會有很多種,前臺直接使用JavaScript來添加,或者先維護一個包含枚舉項值得列表,再向列表中添加一個“all”的項,等等等等。但我今天就是想在給ViewBag.EnumExampleData
賦值的時候一次性的就實現這個需求。由于對Linq真的不是太熟,琢磨出下面這么一種方法,給大家參考
ViewBag.EnumExampleData = (from q in new List<SelectListItem> { new SelectListItem { Text = "all", Value = "all" } } select q) .Concat(from EnumExample p in Enum.GetValues(typeof(EnumExample)) orderby p select new SelectListItem { Text = p.ToString(), Value = Convert.ToInt32(p).ToString() });
方法不算聰明,就是用了一下Concat。如果大家有其他的方式也可以交流一下哈。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。