Я пытаюсь изменить свой DTO с чего-то вроде этого:
[Required]
[Display(Name = "Name")]
[MaxLength(100, ErrorMessage = "error msg")]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string Name { get; set; }
на что-то вроде этого, используя ресурсы:
[Required]
[Display(Name = ResourcesKeys.Name, ResourceType = typeof(res))]
[MaxLength(100, ErrorMessageResourceName = ResourcesKeys.NameFieldTooLongErrorMsg, ErrorMessageResourceType = typeof(res))]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string Name { get; set; }
, где res - этомой файл ресурсов.В приложении будет много файлов ресурсов.Пока это работает нормально, но я хотел бы знать, есть ли какой-либо способ достичь того же результата, но путем отправки типа ресурса другим методом.
Я хотел бы иметь класс:
public static class ResourcesKeys
{
public const string Name = "name";
public const string NameFieldTooLongErrorMsg = "nameFieldTooLongErrorMsg";
public static Type ReturnResourceType()
{
return typeof(res);
}
}
, который помог бы мне достичь:
[MaxLength(100, ErrorMessageResourceName = ResourcesKeys.NameFieldTooLongErrorMsg, ErrorMessageResourceType = ResourceKeys.ReturnResoureType())]
Теперь, когда я пытаюсь это сделать, строкаподчеркнуто, и ошибка говорит:
Аргумент атрибута должен быть выражением константы, выражением typeof или выражением создания массива типа параметра атрибута.
И я понимаю,ты не можешь сделать это так.Я попытался изменить его на
[MaxLength(100, ErrorMessageResourceName = ResourcesKeys.NameFieldTooLongErrorMsg, ErrorMessageResourceType = typeof(ResourceKeys.ReturnResoureType()))]
, и сообщение на этот раз выглядит следующим образом:
Имя типа ReturnResourceType не существует в типе ResourceKeys.
и это совершенно понятно.ReturnResourceType () - это не тип, а метод.Я понялЧего я не понимаю, так это какого-нибудь способа заставить это работать?