Могу ли я использовать другие аргументы атрибута, чем числа в DataAnnotations.StringLength? - PullRequest
1 голос
/ 18 апреля 2019

У меня есть класс (Настройки), который содержит весь жестко закодированный код.Это действительно удобно для определенных полей, таких как maxCharactersFields и сообщений об ошибках, так что я могу использовать одно и то же поле для отображения, моделей и моделей представления.Поэтому, если это изменит это будущее, все изменится так же.Тем не менее, я не могу использовать это в моделях представления.Более конкретно в StringLength System.ComponentModel.DataAnnotations.

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

Некоторые вещи, которые я уже пробовал, - это заменить их полем во ViewModel, в котором я работаю, но выдает ту же ошибку.Я гуглил и искал в StackOverflow, но, похоже, не могу найти никого, кто пытался сделать что-то подобное и столкнулся с той же проблемой.

До сих пор я узнал, что не могу использоватьмой класс настроек, потому что это не базовый тип, но есть ли способ обойти его?

Ошибка возникает в строке StringLength.

[Display (Name = "E-mail van de gebruiker", Prompt = "John.Doe@gmail.com")]
        [DataType (DataType.EmailAddress)]
        [Required]
        [StringLength(Settings.maxCharactersEmail)]
        public string Email { get; set; }
    public static class Settings
    {
....
        public static readonly int maxCharactersEmail= 320; //Googled it
....
    }

1 Ответ

1 голос
/ 18 апреля 2019

Это на самом деле не имеет ничего общего с типом настроек. Атрибуты используются во время компиляции, поэтому вы не можете использовать статические значения или значения экземпляров. Вы должны использовать постоянные значения (public const int):

public static class Settings
{
    public const int maxCharactersEmail= 320; //Googled it
}

Ваш атрибут теперь будет работать:

[Display (Name = "E-mail van de gebruiker", Prompt = "John.Doe@gmail.com")]
[DataType (DataType.EmailAddress)]
[Required]
[StringLength(Settings.maxCharactersEmail)]
public string Email { get; set; }
...