zoukankan      html  css  js  c++  java
  • mvc中枚举的使用和绑定枚举值到DropDownListFor

    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.完毕

  • 相关阅读:
    分治fft
    DSU on tree
    最小矩形覆盖
    用gallery展示图片,实现中间图片稍大,两边较小的效果
    动态刷新listview中的数据
    比较两个文件是否一样
    安卓巴士Android开发神贴整理
    Failed to register input channel. Check logs for details.
    解决scrollview嵌套ImageView时,出现除顶部和底部黑块的问题
    获取系统图片,并放入ImageList
  • 原文地址:https://www.cnblogs.com/zx724792526/p/4275133.html
Copyright © 2011-2022 走看看