MVC3: Bind Enum To DropDownList ?

来源:互联网 发布:手机淘宝主页怎么设置 编辑:程序博客网 时间:2024/05/08 11:16

0. 准备测试数据

0.1 : 枚举

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace MvcApplication.Models{    public enum YesOrNo    {        否 = 0,        是 = 1    }}

0.2 : 对应实体类及表sql

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.ComponentModel.DataAnnotations;namespace MvcApplication.Models{    public class Test    {        [Key]        public int Id { get; set; }        [Display(Name = "状态")]        [Required(ErrorMessage = "状态不能为空.")]        public int Status { get; set; }    }}/*-- 对应SQL CREATE TABLE Test(Id INT PRIMARY KEY IDENTITY(1,1),[Status] INT)goINSERT INTO Test VALUES(1) */

0.3 在Controller 文件夹上生成强类型(Test)的读写控制器及视图. (自动生成这些,我们的测试工作就很轻松了)


1.  写一个扩展方法,放在静态的工具类中。

/// <summary>/// 将枚举转换到Select的扩展方法/// </summary>/// <typeparam name="TEnum">枚举类型</typeparam>/// <param name="enumObj">枚举对象</param>/// <returns>SelectList</returns>public static SelectList ToSelectList<TEnum>(this TEnum enumObj){    var values = from TEnum e in Enum.GetValues(typeof(TEnum))                    select new { Id = Convert.ToInt32(e), Name = e.ToString() };    return new SelectList(values, "Id", "Name", Convert.ToInt32(enumObj));}


2. 改写Action

//// GET: /Test/Edit/1 public ActionResult Edit(int id){    Test test = db.Test.Find(id);    ViewBag.list = ((YesOrNo)test.Status).ToSelectList();    //ViewData["status"] = ((YesOrNo)test.Status).ToSelectList();  //不可以的    return View(test);}

3. 改写View 中的Edit.cshtml

@Html.DropDownListFor(model=> model.Status, ViewBag.list as SelectList )

4. 运行 /Test/Edit/1  看看效果吧。



原创粉丝点击