Почему я не могу использовать DisplayAttribute с файлом Global Resource? - PullRequest
0 голосов
/ 18 ноября 2011

Вопрос уже объясняет, что я пытаюсь сделать, вот пример:

[Display(Name = Localization.City)]
public string City { get; set; }

Ошибка есть, но (для меня) не имеет смысла: Аргументом атрибута должно быть константное выражение, выражение typeof или выражение создания массива типа параметра атрибута

Ответы [ 4 ]

6 голосов
/ 21 ноября 2011

Чтобы использовать DisplayAttribute с ресурсами, вам нужно использовать

[Display(ResourceType=typeof(Localization), Name="City")]
public string City {get;set;}

И не забудьте открыть файл ресурсов и установить для модификатора доступа общедоступный вместо внутреннего.

1 голос
/ 21 ноября 2011

Извлечено из: Текст атрибута C # из файла ресурсов?

public class CustomAttribute : Attribute
{

    public CustomAttribute(Type resourceType, string resourceName)
    {
                Message = ResourceHelper.GetResourceLookup(resourceType, resourceName);
    }

    public string Message { get; set; }
}

public class ResourceHelper
{
    public static  string GetResourceLookup(Type resourceType, string resourceName)
    {
        if ((resourceType != null) && (resourceName != null))
        {
                PropertyInfo property = resourceType.GetProperty(resourceName, BindingFlags.Public | BindingFlags.Static);
                if (property == null)
                {
                        throw new InvalidOperationException(string.Format("Resource Type Does Not Have Property"));
                }
                if (property.PropertyType != typeof(string))
                {
                        throw new InvalidOperationException(string.Format("Resource Property is Not String Type"));
                }
                return (string)property.GetValue(null, null);
        }
        return null; 
        }
}
1 голос
/ 21 ноября 2011

Параметры атрибута должны быть исправлены во время компиляции. Обратитесь к ответу Джона Скита здесь на SO:

Выражение E является выражением атрибут-аргумент, если все следующие утверждения> true: • тип E является атрибутом тип параметра (§17.1.3). • Во время компиляции значение E может быть разрешается к одному из следующих: • Постоянное значение. • System.Type объект. • одномерный массив выражений атрибут-аргумент.

Можете ли вы показать, как вы объявили «Localization.City»?

0 голосов
/ 18 ноября 2011

Сообщение об ошибке ясно.

Localization.City не является постоянным.Я предполагаю, что это просто static поле / свойство "только для чтения".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...