博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mvc中枚举的使用和绑定枚举值到DropDownListFor
阅读量:6479 次
发布时间:2019-06-23

本文共 3379 字,大约阅读时间需要 11 分钟。

1.EnumManage.cs新建枚举类

using System;

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.Reflection;
using System.Web.Mvc;
namespace Manage.Extension
{
    //枚举
    public enum TableStatus
    {
        [EnumDisplayName("空台桌")]
        EmptyTable = 1,
        [EnumDisplayName("已出单")]
        Single = 2,
        [EnumDisplayName("未出单")]
        NoSingle = 3,
        [EnumDisplayName("预定台")]
        Schedule = 4,
        [EnumDisplayName("呼叫")]
        Call = 5,
        [EnumDisplayName("加菜")]
        AddDish = 6,
        [EnumDisplayName("下单")]
        Down = 7,
        [EnumDisplayName("结账")]
        Checkout = 8,
        
    }
    public class EnumDisplayNameAttribute : Attribute
    {
        private string _displayName;
        public EnumDisplayNameAttribute(string displayName)
        {
            this._displayName = displayName;
        }
        public string DisplayName
        {
            get { return _displayName; }
        }
    }
    public class EnumExt
    {
        /// <summary>
        /// 根据枚举成员获取自定义属性EnumDisplayNameAttribute的属性DisplayName
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static string GetEnumCustomDescription(object e)
        {
            //获取枚举的Type类型对象
            Type t = e.GetType();
            //获取枚举的所有字段
            FieldInfo[] ms = t.GetFields();
            //遍历所有枚举的所有字段
            foreach (FieldInfo f in ms)
            {
                if (f.Name != e.ToString())
                {
                    continue;
                }
                //第二个参数true表示查找EnumDisplayNameAttribute的继承链
                if (f.IsDefined(typeof(EnumDisplayNameAttribute), true))
                {
                    return
                      (f.GetCustomAttributes(typeof(EnumDisplayNameAttribute), true)[0] as EnumDisplayNameAttribute).DisplayName;
                }
            }
            //如果没有找到自定义属性,直接返回属性项的名称
            return e.ToString();
        }
        /// <summary>
        /// 根据枚举,把枚举自定义特性EnumDisplayNameAttribut的Display属性值装到SelectListItem中
        /// </summary>
        /// <param name="enumType">枚举</param>
        /// <returns></returns>
        public static List<SelectListItem> GetSelectList(Type enumType)
        {
            List<SelectListItem> selectList = new List<SelectListItem>();
            foreach (object e in Enum.GetValues(enumType))
            {
                selectList.Add(new SelectListItem() { Text = GetEnumCustomDescription(e).ToString(), Value = ((int)e).ToString() });
            }
            return selectList;
        }
    }
}
    
2.新建辅助方法类EnumHtml.cs(  @Html.DropDownListFor(model => model.TableStatus, (List<SelectListItem>)ViewData["date"]) )

using System;

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.Reflection;
using Manage.Extension;
namespace System.Web.Mvc
{
    public static class EnumHtml
    {
        
        //显示Enum类型的Name字段
        public static MvcHtmlString DisplayEnumName(this HtmlHelper htmlHelper, string enumTypeName, int value)
        {
            //"Manage.Extension."  EnumManage.cs的命名空间
            Type enumType = Type.GetType("Manage.Extension." + enumTypeName);
            if (!Enum.IsDefined(enumType, value))
            {
                return MvcHtmlString.Empty;
            }
            EnumDisplayNameAttribute[] EnumAttributes = (EnumDisplayNameAttribute[])(enumType.GetField(Enum.GetName(enumType, value))).GetCustomAttributes(typeof(EnumDisplayNameAttribute), false);
            if (EnumAttributes.Length > 0)
            {
                return MvcHtmlString.Create(EnumAttributes[0].DisplayName);
            }
            //如果只是要简单的返回枚举的Name值就只要这一行了
            return MvcHtmlString.Create(Enum.GetName(enumType, value));
        }
        
     }
}
  3.后台

public ActionResult Edit(int id = 0)
        {
            Table table = db.Tables.Find(id);
            if (table == null)
            {
                return HttpNotFound();
            }
            ViewData["date"] = Manage.Extension.EnumExt.GetSelectList(typeof(TableStatus));
            return View(table);
        }

4.view视图

index:

 @Html.DisplayEnumName("TableStatus",item.TableStatus.Value)

edit:

@Html.DropDownListFor(model => model.TableStatus, (List<SelectListItem>)ViewData["date"])

5.完毕

转载于:https://www.cnblogs.com/zx724792526/p/4275133.html

你可能感兴趣的文章
Python类型转换、数值操作(收藏)
查看>>
oracle11g dataguard 安装手册(转)
查看>>
1. Two Sum - Easy - Leetcode解题报告
查看>>
多线程---同步函数的锁是this(转载)
查看>>
鱼C记事本V1.0(下)- 零基础入门学习Delphi28
查看>>
百练 2742 统计字符数 解题报告
查看>>
Ubuntu搜狗输入法候选词乱码
查看>>
js中回调函数写法
查看>>
React native android 最常见的10个问题
查看>>
数据结构和算法
查看>>
.Net 项目代码风格要求
查看>>
[pat]1045 Favorite Color Stripe
查看>>
Immutable学习及 React 中的实践
查看>>
【转】性能测试步骤
查看>>
OSI与TCP/IP各层的结构与功能,都有哪些协议
查看>>
Android实例-程序切换到后台及从后台切换到前台
查看>>
spring boot启动定时任务
查看>>
算法 (二分查找算法)
查看>>
java Date 当天时间戳处理
查看>>
Python~迭代
查看>>