Asp.net mvc: требуется ссылка на объект Ошибка при вызове функции в [Required (ErrorMessage)

Я создаю веб-приложение в asp.net-mvc, в котором я отправляю Required ErrorMessage из своей модели, но проблема в том, что я хочу перевести сообщение в соответствии с предпочтениями пользователя,

поэтому я сделал что-то вроде ниже

[Required(ErrorMessage = convertErrorMessage("Text to translate"))]
public string Reviews { get; set; }

public string convertErrorMessage(string text)
{
   //convertingText in different language
   return convertedText;
}

но я получаю следующую ошибку

an object reference is required for non static field

на нижней строке

[Required(ErrorMessage = convertErrorMessage("Text to translate"))]

что я могу сделать, если я хочу достичь этого?


person twmproduct 02    schedule 30.04.2019    source источник


Ответы (1)


Вы не можете вызывать методы для инициализации атрибутов, потому что эти значения должны быть известны во время компиляции. Однако есть еще два возможных способа:

  1. ASP.NET MVC поддерживает стандартные способы локализации, что является рекомендуемым способом. Это очень обширная тема, поэтому я могу оставить только несколько ссылок [1], [2] здесь. Обратите внимание, что даже у используемого вами RequiredAttribute есть свойства ErrorMessageResourceName и ErrorMessageResourceType — это явные намеки на то, что вы должны использовать стандартные инструменты для стандартных задач.

  2. Если вы все еще хотите придерживаться того, что у вас есть, определите свой собственный атрибут и внедрите в него свою пользовательскую логику:

    class RequiredLocalizedAttribute : RequiredAttribute {
        // override ErrorMessage get
        // or ErrorMessageString get
    }
    

    Тем не менее, я бы настоятельно рекомендовал вместо этого рассмотреть вариант 1. Вам может понадобиться немного больше времени, чтобы изучить и реализовать это, и это не будет потрачено впустую, и может избавить вас от головной боли по мере роста вашего приложения.

person Andrei    schedule 30.04.2019
comment
Я не понял -> переопределить ErrorMessage get - person twmproduct 02; 30.04.2019
comment
не могли бы вы объяснить мне - person twmproduct 02; 30.04.2019