ErrorMessageResourceName и ErrorMessage не могут быть установлены оба, но я только устанавливаю один - PullRequest
10 голосов
/ 04 марта 2011

Это ошибка, которую я получаю, используя MVC2:

Either ErrorMessageString or ErrorMessageResourceName must be set, but not both.

Это исходит из [Обязательного] аннотации данных проверки.

Трассировка стека:

InvalidOperationException: Either ErrorMessageString or ErrorMessageResourceName must be set, but not both.]
   System.ComponentModel.DataAnnotations.ValidationAttribute.SetupResourceAccessor() +89338
   System.ComponentModel.DataAnnotations.ValidationAttribute.FormatErrorMessage(String name) +38
   System.Web.Mvc.<Validate>d__1.MoveNext() +215
   System.Web.Mvc.<Validate>d__5.MoveNext() +735
   System.Web.Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) +424
   System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +732
   System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +475
   System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +152
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +709
   System.Web.Mvc.Controller.ExecuteCore() +162
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +58
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +371

Я свел мою модель представления к этому (она ломается всякий раз, когда есть атрибут [Обязательный], без проблем работает):

[Required(ErrorMessage = "")]
[DataType(DataType.Text)]
[DisplayName("Property Name")]
public string MyProperty { get; set; }

Мой контроллер возвращает пустую ViewModel, и форма в представлении полностью пуста ... просто кнопка отправки.

Ответы [ 4 ]

22 голосов
/ 29 апреля 2013

В моем случае я написал ErrorMessage = null, пример:

[EmailAddress(ErrorMessageResourceName = "FORM_FIELD_VALIDATION_EMAIL", ErrorMessageResourceType = typeof(App_GlobalResources.Common.View_Common_Forms), ErrorMessage = null)]

ErrorMessage = " " не работает.

19 голосов
/ 04 марта 2011

Проблема заключается в установке ErrorMessage в пустую строку.Я должен был бы предположить, что в некоторый момент есть проверка для String.Empty в коде MVC, который вызывает проблемы.

Установка ErrorMessage в "" (один пробел) решила проблему.

0 голосов
/ 11 августа 2017

У меня была похожая проблема с пользовательским атрибутом ValidationAttribute.

В методе IsValid я устанавливал ErrorMessage.Исправление состояло в том, чтобы удалить назначение для свойства ErrorMessage ...

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
    //code before ...
    this.ErrorMessage = this.FormatErrorMessage(validationContext.DisplayName); //NOT GOOD...
    ValidationResult validationResult = new ValidationResult(this.ErrorMessage, //And using the ErrorMessage Here...
        new[] { validationContext.MemberName });
    return validationResult;
}

Я писал модульный тест, и они выполнялись, только если я запускал / отлаживал один за другим.Но когда я нажимаю «Run All», только первый проходил?Они никак не связаны ...

Я также пытался https://stackoverflow.com/a/20848920/4798459 Не сработало.

Так что, да, исправление состояло в том, чтобы удалить назначение ErrorMessagepropety!

0 голосов
/ 04 марта 2011

Я предполагаю, что [DataType(DataType.Text)] имеет сообщение проверки, определенное в ресурсах (в System.ComponentModel.DataAnnotations.Resources), и наличие этого и вашего [Required] вызывает это InvalidOperationException. Попробуйте удалить [DataType] или [Required] и посмотрите, исчезнет ли исключение.

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