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