C# 如何保存枚举mvc的字符串值
我是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 }
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);
}