2012-03-23 3 views
5

현재 Razor View 엔진을 사용하는 MVC 3 앱이 있습니다. 난 눈에 거슬리지 유효성 검사가 활성화되어 있습니다. 문제는 페이지로드시 어떤 이유로 인해 편집보기에 필드가 값이 있어도 필수 필드에 대한 오류가 표시된다는 것입니다. 다른 사람이 이것에 부딪 혔습니까? 이 문제를 해결하기위한 제안이 있으십니까? 감사. 문제와페이지로드시 유효성 검사 실행

샘플 필드 : 모델에

<div class="full"> 
      <label>Description:</label> 
      @Html.EditorFor(x=>x.Description, new{@class="super-textarea"}) 
      @Html.ValidationMessageFor(x => x.Description) 

     </div> 

데이터 주석 :

 [Required, DataType(DataType.MultilineText)] 
    public virtual string Description { get; set; } 

WebConfig 활성화 설정 :

 <add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

그리고 물론 적절한 JQuery와 파일 ....

+0

는 사실을 될 것 같지 않습니다 눈에 띄지 않는 유효성 검사와 관련된 문제는 아니지만 오히려 내 모델 상태가 페이지로드 전에 유효하지 않게되고 있습니다 ... – AFD

+0

도움이 그래서 것

ModelState.Clear(); 
user1287132

답변

10

좋아. 문제를 찾았습니다. 모델 바인딩 시도가 발생하여 유효성 검사가 발생했습니다. 이것은 우리의 Get Method가 이렇게 생겼기 때문에 발생했습니다.

[HttpGet, RequestedObjectFilter] 
    public virtual ViewResult Edit(TKey id, T requestedObject) 
    { 

     return View(requestedObject); 
    } 

.NET MVC의 특징

가 기준 값이 ViewResult의 방법 서명에 매개 변수로 전달되는 언제이며, ModelBinding 차례로 검증을 발사하는 트리거됩니다. 우리가 객체에 우리의 메소드를 넘겨주는 이유는 RequestedObjectFilter가 추상화 된 저장소에서 관련 엔티티를 가져 와서 ActionParameters 속성을 통해이 메소드에 전달하기 때문입니다. RequestedObjectFilter를 리팩터링하여 대신 ViewModel을 설정하여 메서드에서 매개 변수를 제거하여 문제를 해결할 수있었습니다. 이제 우리의 방법은 다음과 같습니다

 [HttpGet, RequestedObjectFilter] 
    public virtual ViewResult Edit(TKey id) 
    { 

     return View(); 
    } 
+0

좋아요! 이것은 내가 같은 문제를 겪고있는 동안 나를 도왔다. 고마워. –

14

당신은 또한 ModelState에서 오류를 지울 수

당신의 코드 추출물 ... 많은
+0

이 게시물을 보는 것을 포함하여 여러 가지 시도를했지만 그 것이 적용 가능하다고 생각하지 않은 후에 시간이 잘못되었습니다. 이 문제가 해결되었습니다. – Caverman

관련 문제