2009-04-07 4 views
6

ASP.NET MVC 모델의 오류에 초점 :설정은 좀 유효성 검사를 수행하고 ModelState에 오류를 추가하는 모델을 가지고

ViewData.ModelState.AddModelError("mycontrol", "message") 

그들은보기 측에 잘 표시 할 수 있지만 거기에있다 유효성 검사 메시지에 해당하는 컨트롤에 포커스를 설정하는 방법은 무엇입니까? 지금은 페이지가 새로 고쳐지고 페이지 상단에 머물러 있기 때문에 오류가 페이지 끝 부분에 있다면 사용자에게 어떤 일이 발생했는지 분명하지 않습니다.

참고 : 다른 솔루션은 ValidationSummary가 페이지 상단에 오류 목록을 표시하는 것이지만 아무 것도 표시하지 못했습니다. 내 모든 오류는 ValidationMessage를 통해 표시됩니다.

편집 : ValidationSummary에서 문제점을 발견했습니다. 내가 가진 마크 업이었다 :

했어야
<% Html.ValidationSummary()%> 

: 난 아직도하고 싶은

<%=Html.ValidationSummary()%> 

그러나 오류와 함께 현장에 스냅하는 방법을 알고.

+0

ValidationSummary가 작동해야합니다. 그것은 나를 위해 않습니다. 마크 업을 보여줄 수 있습니까? (정적 html을 생략함으로써 간단해질 수 있습니다)? HtmlHelper 확장 프로그램은 오류를 렌더링하기 위해 동일한 모델 상태를 찾습니다. – tvanfosson

+0

마크 업에서 누락 된 "="을 발견했을 때 (그리고 이마에 열린 손바닥을 놓은 상태에서) 샘플 코드를 게시하는 중반에 도착했습니다. – gfrizzle

답변

24

오류가있는 첫 번째 입력으로 스크롤하는 jquery 장점이 있습니다. 까다로운 점은 jQuery 객체의 focus() 메소드가 포커스를 요소에주는 대신 초점 이벤트를 발생시킬 때 focus()를 호출하기 전에 기본 DOM 요소를 가져와야한다는 것입니다.

<script type='text/javascript'> 
    $(document).ready(function() 
    { 
     var input = $('.input-validation-error:first'); 

     if(input) 
     { 
      input.focus(); 
     } 
    }); 
</script> 
+0

좋은 해결책. 방금 작동하게하려면 "return false"를 추가해야했습니다. if (입력) { input.focus(); false를 반환합니다. } –

+0

@HallgeirEngen 정말 필요하지 않아야합니다. 준비 핸들러의 실행을 중단하기 만하면됩니다. 그 이후에 코드가 있으면 실행되지 않습니다. – tvanfosson

1

JavaScript를 사용하여 MVC 유효성 검사 HTML 클래스 (input-validation-error)가 추가 된 입력 요소를 찾은 다음 캐럿을 첫 번째 캐럿으로 이동할 수 있습니다. 내가 테스트하지는 않았지만 그 요소로 화면 이동/이동해야한다.

jQuery와 같은 JS 라이브러리를 사용하면이 작업을 간단하게 수행 할 수 있습니다.

관련 문제