我是MVC的新手。我在Orders表中使用以下枚举:
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>
在控制器中:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(OrderViewModel ovm, int id)
...
Order order = db.Orders.FirstOrDefault(o => ((o.OrderId == id)));
order.OrderStatus = ovm.OrderStatus;
我的问题是我想保存枚举的字符串值,而不是整数值。这样就可以更容易地在报表和其他视图中显示枚举的字符串值。我一直在研究这个问题但是找不到使用的技术却没有成功。任何帮助将不胜感激。
答案 0 :(得分:1)
如果找不到枚举成员,则可以使用帮助程序类来尝试获取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正常存储你的枚举值,当你需要显示字符串值时,可以调用helper类。
例如,要在报告中显示您可以创建报告模型:
public class ReportModel
{
public OrderStatus OrderStatus { get; set; }
public string OrderStatusDisplayText => DisplayAttributeHelper.ReadDisplay(OrderStatus);
}
希望这有帮助!