2010-03-29 5 views
0

저는 asp.net mvc를 약간 사용했습니다 (그러나 저는 아직 초보자입니다). jquery 포스트 백의 결과로 두 개의 뷰를 업데이트 할 수있는 기능이 필요합니다.ASP.NET MVC 2 JQuery POST가 모델 상태 오류를 표시하지 않습니다.

기본적으로 목록과 세부 정보보기가 있습니다. 상세보기는 jquery-UI 팝업을 사용하여 jquery 팝업을 사용하여 표시됩니다. 세부 정보 저장에 성공하면 (즉, 세부 정보보기에 유효성 검사 오류가없는 경우) 목록을 업데이트하고 싶습니다. 그러나 세부 정보보기에 유효성 검사 오류가 있으면 사용자가 유효성 검사 오류를 볼 수 있도록 세부 정보보기를 업데이트하고 싶습니다.

그래서 내 컨트롤러에서 View 대신 JsonResult를 반환한다고 생각했습니다.

[HttpPost] 
public ActionResult SavePersonInfo(Person p) { 
    if(ModelState.Valid) { 
     return View("PersonList"); 
    } 

    return Json({Error = true, View = PartialView("PersonDetails", p)}); 
} 

가 나는 사람 목록보기를 반환 오류 없지만, 어떤 유효성 검사 오류가있는 경우, 나는 세부 사항보기 돌아가있는 경우에 당신이 볼 수 있듯이

. 내가 JsonResult를 반환하는 이유는 뷰 (jquery)가 업데이트 할 부분을 알고 있도록 오류가 있다는 것을 알 필요가 있습니다 (사람 목록 'div'또는 팝업 대화 상자 'div ').

jquery는 다음과 같습니다 (사람 세부 정보를 입력하는 양식이 있고 "저장"버튼을 클릭하면 "SubmitPersonForm();"함수가 호출된다고 가정하십시오) :

<script type="text/javascript> 
    $('#btnSave').click(function (event) { 
      onBegin(); 

      $.ajax(
      { 
       type: "POST", 
       url: "/Person/Save", 
       data: $('form').serialize(), 
       success: function (result) { 
       if(result.Error) { 
         $('#dvDetails').html($(result).View)); 
        } 
        else { 
         $('#dvPersonList').html($result); 
        } 
       } 
      }); 
     }); 
</script> 

그래서 내가 가진 문제는 유효성 검사 오류가 발생하면 올바른 'div'가 업데이트 된 것을 볼 수 있지만 asp.net MVC 유효성 검사 메시지가 손실됩니다. ASP.NET MVC를 완전히 무시한 것처럼 유효성 검사 오류가 빨간색으로 표시되지 않습니다. 그러나 내 ModelState에는 이러한 오류가 있으며 세부 정보보기에는 표시되지 않습니다. 나는 valication summary와 Html.ValidationFor (m => ...) 구문을 내 세부 사항보기에 넣었습니다.

누군가 내가 왜 유효성 검사 오류를 보지 못하고 있다고 말할 수 있습니까? JSonResult를 사용하고 있지만 'dvDetails'를 렌더링 할 때 유효한 뷰인 올바른 속성을 사용합니다. 내가 asp.net mvc에서 가정하지 않는 것을하고 있습니까? Btw Visual Studio 2010 RC asp.net mvc2 RC 사용하고 있습니다.

감사합니다.

답변

0

URL이 동작 이름과 일치하지 않습니다 ... 컨트롤러에서 잘못된 메서드를 호출하고 있는지 확실하지 않습니다 ... 단지 아이디어입니다. :-)

+0

답장을 보내 주셔서 감사합니다. 미안 해요 내 질문에 오타입니다. 나는 그 URL이 옳았다는 것을 절대적으로 확신했다. 사실 디버깅을했고 내 컨트롤러에 전화를 걸었습니다. 실제로 유효성 검사가 실패하면 ModelState에 내 데이터 주석의 결과로 유효성 검사 오류가 포함됩니다. 정말 왜 내가보기에서 오류를 보지 않을지 잘 모르겠다. ( – Oshan

+0

좋아, 단지 확인하고 싶었어 ... 어쩌면 자사의 제한 사항은 부분보기로 바뀌었을 때 이것을 보았습니까? http://stackoverflow.com/questions/1556533/asp-net-mvc-modelstate-and-partial-view는 같을 것 같습니다. probmen. – Syska

0

ASP.NET MVC 코드는 응답을 처리하여 다시 게시하는 동안 ModelState에 저장된 유효성 검사 오류를 표시합니다. Ajax Post를 사용하고 있기 때문에 포스트 백 코드는 페이지를 다시 작성하고 유효성 검사 오류를 표시하지 않습니다. 유효성 검사 오류를 표시하려면 직접 처리해야합니다.

ModelState 오류를 응답으로 배열로 전달하여이 작업을 수행했습니다. 내 Ajax 응답을 처리하여 응답의 해당 오류 메시지가있는 폼의 유효성 오류 자리 표시 자 요소를 업데이트합니다.

경고 : 그러나 ModelState의 키가 대소 문자를 변경하여 양식의 요소 ID 문자열이 키에 사용 된 문자열과 정확하게 일치하지 않을 수 있습니다. ModelStateDictionary는 대소 문자를 구별하지 않지만 DOM ID는 대소 문자를 구별하지 않습니다.

관련 문제