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

时间: 2024-10-26 00:38:43

mvc中枚举的使用和绑定枚举值到DropDownListFor的相关文章

asp.net core mvc中如何把二级域名绑定到特定的控制器上

由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情况下需要给不同的板块设置不同的二级域名,如新浪体育sports.sina.com.cn. 在asp.net core mvc中,如果要实现板块的效果,可能会给不同的板块建立不同的控制器(当然也有其他的技术,这里不讨论实现方式的好坏),在这种情况下,如何给控制器绑定上独有的二级域名,比如体育频道对应的

mvc中下拉框如何绑定枚举值

一般的BS程序开发中,习惯了使用asp.net控件在后台直接绑定数据,可是最近遇到了一个问题,在mvc中,如何在前台绑定后台数据呢? 以前,我们都是直接在前台页面列举数据如下: <SOA:HBDropDownList ID="ddlReadState" runat="server" Width="200px"> <asp:ListItem Text="请选择" Value="-1">

在WPF中使用变通方法实现枚举类型的XAML绑定

问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我们希望实现的目标有: 建立选择项与ItemsSource的对应关系: 自动获取用于ItemsSource的枚举源: 自定义下拉框中显示的内容. 对于目标1,考虑最简单的模式,即枚举的定义采用从0开始的连续整数,可以使用IValueConverter接口来实现从枚举到整型的双向转换,以使得枚举成员绑定

c#中DropDownList控件绑定枚举数据

c# asp.net 中DropDownList控件绑定枚举数据 1.枚举(enum)代码: private enum heros { 德玛 = 0, 皇子 = 10, 大头 = 20, 剑圣 = 30, } 如果不为枚举数列表中的元素指定值,则它们的值将自动递增,从1开始. 2.cs代码: private void LoadData() { //检索枚举heros返回包含每个成员的值的数组 Array herosArray = Enum.GetValues(typeof(heros)); fo

ASP.NET MVC 中枚举生成下拉框

最近公司在开发财务系统,在工作中遇到不少的地方需要下拉框. 但是枚举框中数据的内容又来自枚举. 枚举代码如下: 1 public class EnumDemo 2 { 3 4 public enum Value { 5 First=1, 6 Second=2 7 } 8 public enum Name 9 { 10 我是第一 = 1, 11 我是第二 = 2 12 } 13 14 15 16 } 我一看还挺简单. 于是第一次是这样的: 1 <select> 2 <option valu

ASP.NET Core 四种方式绑定枚举值

原文:ASP.NET Core 四种方式绑定枚举值 前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满满的干货,你值得拥有. 探讨枚举绑定方式# 我们首先给出要绑定的枚举类. public enum Language { JavaScript, Java, C, Python, SQL, Oracle } 枚举绑定方式一(@Html.DropDow

DataTrigger 绑定枚举

在触发器中绑定枚举类型: <ControlTemplate.Triggers> <DataTrigger Binding="{Binding CheckStateEnum}" Value="WaitCheck"> <Setter TargetName="Border" Property="Background" Value="{DynamicResource ListViewItemNo

绑定枚举到dropdownlist

pageTools.BindEnumToDropdownList(typeof(enumDealerArea), ddlBmwArea, new ListItem("--请选择--", "0"), ""); /// <summary>    /// 绑定枚举到dropdownlist    /// </summary>    /// <param name="enumType">枚举类型&l

浅谈swift中的那些结构体和枚举

首先呢, 我们先写一个struct struct Point { var x = 0 var y = 1 mutating func change (newX:Int,newY: Int) { x = newX y = newY } } var p1 = Point(x: 4, y: 4) p1.x //4   在这里呢,可能有人会问,为什么在func前面要加一个mutating, 如果不加的话, 编译器抛出错误,报出不能在实例方法中修改属性值 所以呢, 我们必须如果想改变成员变量的话, 就必须