【发布时间】:2016-03-08 23:54:50
【问题描述】:
我有一个具有以下枚举属性的模型:
namespace ProjectManager.Models
{
public class Contract
{
.....
public enum ContractStatus
{
[System.ComponentModel.Description("جديد")]
New,
[System.ComponentModel.Description("در انتظار پرداخت")]
WaitForPayment,
[System.ComponentModel.Description("پرداخت شده")]
Paid,
[System.ComponentModel.Description("خاتمه يافته")]
Finished
};
public ContractStatus Status { get; set; }
.....
}
}
在我的 razor 视图中,我想显示每个项目的枚举描述,例如جديد 而不是 New。我尝试按照this answer 中的说明进行操作,但我不知道在哪里添加扩展方法以及如何在我的剃刀视图文件中调用扩展方法。如果有人可以完成我的代码,我将不胜感激:
@model IEnumerable<ProjectManager.Models.Contract>
....
<table class="table">
<tr>
.....
<th>@Html.DisplayNameFor(model => model.Status)</th>
.....
</tr>
@foreach (var item in Model) {
<tr>
......
<td>
@Html.DisplayFor(modelItem => item.Status) //<---what should i write here?
</td>
....
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })|
</td>
</tr>
}
【问题讨论】:
-
您可以将扩展方法放在任何地方(在您当前的程序集中,或另一个程序集或单独的 dll 中)。您只需将其用作
<td>@item.Status.DisplayName()</td>(并包含指向您程序集的必要using语句。 -
@StephenMuecke 我在公共静态类
Utils中添加了DisplayName 方法,这使得在添加using ProjectManager.App_Start;后可以在我的项目中以Utils.DisplayName访问该方法,但是在@item.Status.DisplayName()中没有解决它。我现在该怎么办? -
你遇到了什么错误?
-
@StephenMuecke 没有
DisplayName的重载方法,然后我注意到我在视图文件的开头错过了using ProjectManager.App_Start;,然后添加了它。看来我和这个 MVC 的东西有很大关系!您可以发表您的评论作为答案吗:)? -
我强烈建议您改用
system.componentmodel.dataannotations.displayattribute,因为;它已经像DescriptionAttribute一样内置在 .Net 中,因为它已经拥有许多您将来很可能需要的属性。
标签: c# asp.net-mvc razor enums data-annotations