1

Statusクラス メンバー アノテーションで指定されたリソースからロードされた名前テキストを使用して、Enum のカスタム表示テンプレートを作成しようとしています。を使用して表示テンプレートを簡単にロードできました@Html.DisplayFor(...)Nameしかし、リソースからロードされたものを表示する方法がわかりません( で指定されたResourcesTypeDisplayアノテーション クラス メンバ)

コード:

~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>   
        }
    }
4

0 に答える 0