Действительно ли возможно использовать аннотирования данных для LabelFor, ValidationMessageFor, EditorFor с ресурсами со строгим контролем типов?

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

[DisplayName(CTRes.UserName)]
string Username;

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

5
задан LukLed 26 February 2010 в 23:37
поделиться

1 ответ

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

[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; }
7
ответ дан 14 December 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: