Status
クラス メンバー アノテーションで指定されたリソースからロードされた名前テキストを使用して、Enum のカスタム表示テンプレートを作成しようとしています。を使用して表示テンプレートを簡単にロードできました@Html.DisplayFor(...)
。Name
しかし、リソースからロードされたものを表示する方法がわかりません( で指定されたResourcesType
、Display
アノテーション クラス メンバ)
コード:
~Views/Shared/DisplayTemplate/Row.cshtml
@using System.ComponentModel.DataAnnotations
@model LeasePlan.Nadmerne_opotrebeni.WebUI.Controllers.Status
@{
var field = Model.GetType().GetField(Model.ToString());
if (field != null)
{
var display = ((DisplayAttribute[])field.GetCustomAttributes(typeof(DisplayAttribute), false)).FirstOrDefault() as DisplayAttribute;
if (display != null)
{
<span class="label status label-info">@((display.Name as string).ToUpper())</span>
}
}
}
Enum Status
public enum Status
{
[Display(Name = "STATUS_LOADING", ResourceType = typeof(Resources.LabelsResources))]
Loading = 1,
[Display(Name = "STATUS_DISABLED", ResourceType = typeof(Resources.LabelsResources))]
Disabled = 2,
}
//編集:私の解決策
解決策を見つけましたが、気分が良くありません...もっと良い方法はありませんか?
~Views/Shared/DisplayTemplate/Row.cshtml
@using System.ComponentModel.DataAnnotations
@model LeasePlan.Nadmerne_opotrebeni.WebUI.Controllers.Status
@{
var field = Model.GetType().GetField(Model.ToString());
if (field != null)
{
dynamic resourcesManager = display.ResourceType.GetProperty("ResourceManager").GetValue(null, null);
var name = resourcesManager.GetString(display.Name as string);
<span class="label status label-info">@(name != null ? name.ToUpper() : name)</span>
}
}