2011-03-03 2 views
8

를 설정하고있다.ErrorMessageResourceName 및 ErrorMessage가이 내가 MVC2를 사용하여지고있어 오류 모두를 설정할 수 없습니다,하지만 난 단 하나의

스택 추적 : 나는 아래이 (가, A [필수] 속성이 모든 시간을 휴식없이 잘 작동) 내보기 모델을 삶은 한

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을 반환하고보기의 양식은 완전히 비어 있습니다. 제출 버튼 일뿐입니다. 내 생각 엔이 [DataType(DataType.Text)]입니다

+0

사용자 정의 유효성 검사에서이 오류가 발생하면 [Here] (http://stackoverflow.com/a/36878989/6061777)를 확인하십시오. –

답변

19

문제는 ErrorMessage를 빈 문자열로 설정하는 데 있습니다. 나는 어떤 시점에서 문제를 일으키는 MVC 코드에서 String.Empty에 대한 검사가 있다고 가정해야 할 것입니다.

ErrorMessage를 ""(한 공간)로 설정하면 문제가 해결됩니다.

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

ErrorMessage = " "

가 작동하지 않습니다 내 경우

+1

null로 설정할 수도 있습니다. – mikalai

0

은 (System.ComponentModel.DataAnnotations.Resources에서) 자원에 정의 된 검증 메시지와 그의 존재를 가지고 있으며, 여러분의 [Required]InvalidOperationException의 원인이됩니다. [DataType] 또는 [Required]을 제거하고 예외가 사라지는지보십시오.

+0

같은 결과입니다. 나는 어제 아침에 그 파일을 되돌리고 무슨 일이 일어날지를 볼 것입니다. –

20

, 나는 쓰기의 ErrorMessage = null의 경우, 예를 들어 있습니다.

+1

이것은 나를 위해 일한, 이것은 답변으로 표시되어야합니다. – Taher

0

사용자 지정 ValidationAttribute와 비슷한 문제가있었습니다.

IsValid 메서드에서 ErrorMessage를 설정하고있었습니다. 수정 내가 단위 테스트를을 writting했다 그들은 내가 하나/디버깅 하나를 실행 한 경우에만 pasisng했다

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; 
} 

...으로 ErrorMessage의 인적 또는에 대입을 제거하는 것이었다. 그러나 "Run All (모두 실행)"을 클릭하면 첫 번째 파일 만 전달됩니다. 그들은 어떤 식 으로든 연결되지 않습니다 ...

나는 또한 시도했습니다 https://stackoverflow.com/a/20848920/4798459 도 작동하지 않았다.

그래, 해결 방법은 ErrorMessage 속성에 대한 할당을 제거하는 것이 었습니다!

관련 문제