c# - 如何保存枚举mvc的字符串值

标签 c# asp.net-mvc enums

我是 MVC 的新手。我在我的订单表中使用以下枚举:

public enum OrderStatus
    {
        Pending = 1,
        Held = 2,
        [Display(Name = "In Process")]
        In_Process = 3,
        Completed = 4,
        Shipped = 5,
        Returned = 6,
        Cancelled = 7
    }

在模型中:

public class Order
    {
        ...
        public OrderStatus OrderStatus { get; set; }
    {

在 View 中:

                <div class="form-group">
                    @Html.LabelFor(model => model.OrderStatus, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EnumDropDownListFor(model => model.OrderStatus,
                              "--Select--", 
                              new { @class = "form-control ingUOM" })  
                            @Html.ValidationMessageFor(model => model.OrderStatus, "", new { @class = "text-danger" })
                     </div>
                 </div>

在 Controller 中:

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(OrderViewModel ovm, int id)
...

 Order order = db.Orders.FirstOrDefault(o => ((o.OrderId == id)));

                order.OrderStatus = ovm.OrderStatus;

我的问题是我想保存枚举的字符串值,而不是它的整数值。这样可以更轻松地在报告和其他 View 中显示枚举的字符串值。我一直在研究这个,但一直未能找到可以使用的技术。任何帮助将不胜感激。

最佳答案

您可以使用辅助类尝试获取 Display 属性的值(如果枚举成员存在),如果找不到则回退以调用 ToString()。像这样的东西应该可以解决问题:

using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;

...

public static class DisplayAttributeHelper
{
    public static string ReadDisplay(Enum target)
    {
        var attrs = target.GetType().GetMember(target.ToString())
            .First()
            .GetCustomAttributes(typeof(DisplayAttribute), false)
            .Cast<DisplayAttribute>();

        foreach (var attr in attrs)
            return attr.GetName();

        return target.ToString();
    }
}

现在您可以继续使用 EF 或 linq 正常存储您的枚举值,当您需要显示字符串值时调用帮助程序类。

例如,要在报表中显示您可以创建报表模型:

public class ReportModel
{
        public OrderStatus OrderStatus { get; set; }

        public string OrderStatusDisplayText => DisplayAttributeHelper.ReadDisplay(OrderStatus);
}

希望这对您有所帮助!

关于c# - 如何保存枚举mvc的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43902375/

相关文章:

c# - 正则表达式 - 文件名中的版本

c# - 无法加载文件或程序集 'System.Web.Mvc, Version=3.0.0.0' 或其依赖项之一

javascript - Flowtype - 字符串与字符串枚举不兼容

c# - 如何将字符串编码成Json字符串文本?

c# - Couchbase 精简版 2 + JsonConvert

c# - 使用数据库表中的DataTable更新?

c# - 从现在到 20 年的 ASP MVC Datetime 范围数据注释?

c# - 如何使用asp net Identity 2.0、mysql和数据库第一种方法注册用户?

c 枚举类型的按位组合参数

java - 我应该将枚举作为参数传递还是传递其文字值