Можно ли использовать аннотации данных для LabelFor, ValidationMessageFor, EditorFor со строго типизированными ресурсами? - PullRequest
5 голосов
/ 27 февраля 2010

Я хотел бы использовать DataAnnotations в моем приложении ASP.NET MVC. Я строго ввел класс ресурсов и хотел бы определить в моем представлении модели:

[DisplayName(CTRes.UserName)]
string Username;

CTRes - мой ресурс, автоматически сгенерированный класс. Выше определение не допускается. Есть ли другие решения?

Ответы [ 3 ]

7 голосов
/ 27 февраля 2010

Существует DisplayAttribute , который был добавлен в .NET 4.0, который позволяет указать строку ресурса:

[Display(Name = "UsernameField")]
string Username;

Если вы пока не можете использовать .NET 4.0, вы можете написать свой собственный атрибут:

public class DisplayAttribute : DisplayNameAttribute
{
    public DisplayAttribute(Type resourceManagerProvider, string resourceKey)
        : base(LookupResource(resourceManagerProvider, resourceKey))
    {
    }

    private static string LookupResource(Type resourceManagerProvider, string resourceKey)
    {
        var properties = resourceManagerProvider.GetProperties(
            BindingFlags.Static | BindingFlags.NonPublic);

        foreach (var staticProperty in properties)
        {
            if (staticProperty.PropertyType == typeof(ResourceManager))
            {
                var resourceManager = (ResourceManager)staticProperty
                    .GetValue(null, null);
                return resourceManager.GetString(resourceKey);
            }
        }
        return resourceKey;
    }
}

который вы можете использовать следующим образом:

[Display(typeof(Resources.Resource), "UsernameField"),
string Username { get; set; }
0 голосов
/ 03 февраля 2011

Атрибуты не могут сделать это

см. Текст атрибута C # из файла ресурсов?

Resource.ResourceName будет строковым свойством, параметры атрибута могут быть только константами, перечислениями, typeofs

0 голосов
/ 07 августа 2010

Теперь это работает так же, как и в MVC3, как упомянуто в сообщении ScottGu , и позволит вам использовать встроенный DisplayAttribute с локализованным файлом ресурсов.

...