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

C# 如何保存枚举mvc的字符串值,c#,asp.net-mvc,enums,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 }

我是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; }
    {
他认为:

                <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>

我的问题是我想保存枚举的字符串值,而不是它的整数值。这样,在报告和其他视图中更容易显示枚举的字符串值。我一直在研究这个问题,但没有找到一种可以使用的技术。任何帮助都将不胜感激。

如果enum成员存在Display属性,您可以使用helper类尝试获取该属性的值,如果找不到则回退调用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();
    }
}

希望这有帮助

您在枚举上尝试过
ToString()
方法吗?您能给出一个明确的例子吗?例如
OrderStatus.ToString()
(变量,而不是枚举类型)我在控制器中尝试过:order.OrderStatus=ovm.OrderStatus.ToString(),但intellisense不喜欢它。
order
是实体框架中的模型吗?如果是这样,并且您是先编码的,则只需将签名更改为
string
,或添加
string
的新属性即可。Intellisense不希望您将
字符串
分配给
订单状态
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();
    }
}
public class ReportModel
{
        public OrderStatus OrderStatus { get; set; }

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