2009-01-30 6 views
3

ASP.Net MVC (릴리스 후보)를 배우기 시작했는데 조금 문제가 있습니다. 나는 까다 롭다 고 생각할 수도 있지만, 나는 물어볼 것이라고 생각했다.ASP.Net MVC JsonResult를 반환하는 Ajax 호출

내장 된 (확장 된) ASP.Net Ajax 메서드를 사용하여 JsonResult 개체를 반환하는 "GetNames"라는 내 컨트롤러를 호출하고 싶습니다. 나는 $ .getJSON() jQuery를 방법을 사용하는 예를 본 적이 있지만 내가 대신 같은 것을 할 것을 선호 :

<%using (Ajax.BeginForm("GetNames", new AjaxOptions() { OnSuccess = "GetNamesSuccess", OnBegin = "GetNamesBegin", OnComplete = "GetNamesComplte", OnFailure = "GetNamesFailure" })) { %> 

    <%=Html.TextBox("DummyData") %> 
    <input type=submit /> 

<% } %> 

<script type="text/javascript"> 
    function GetNamesSuccess() 
    { 
     alert("Success"); 
    } 

    function GetNamesBegin() 
    { 
     alert("Begin"); 
    } 

    function GetNamesComplete() 
    { 
     alert("Complete"); 
    } 

    function GetNamesFailure() 
    { 
     alert("Failure"); 
    }   
</script> 

내가 경고 전혀 얻을, 제출 버튼을 클릭 한 I 때 Json 객체의 텍스트를 포함하는 파일을 다운로드하라는 메시지가 표시됩니다. 적어도 컨트롤러 메소드가 정상적으로 작동하고 있음을 나타냅니다. 그러나 그것은 나를위한 의도 된 동작이 아닙니다 ... 이상적으로, Ajax.BeginForm은 Json 객체가 OnSuccess 또는 OnComplete 메소드로 전달되도록 설정합니다.

이를 수행하는 방법이 있습니까?

답변

4

보기 페이지에 MicrosoftAjax.js 및 MicrosoftMvcAjax.js 자바 스크립트 파일을 모두 포함 시켰습니까? 실제로 Ajax를 사용하는 대신 양식을 게시하는 것처럼 들립니다. Ajax 포스트 백이 자바 스크립트 클래스 누락으로 인해 실패하여 일반 폼 게시를 호출했기 때문에 MicrosoftAjax.js 포함이 누락되었을 때이 문제가 발생했습니다.

관련 메모에서 요청이 컨트롤러에서 Ajax인지 확인하고 그렇지 않은 경우 Json 대신 ViewResult (또는 Redirect)를 반환해야합니다. 누군가 자바 스크립트가 꺼져 있거나 페이지에 오류가있는 경우 Json을 반환하는 대신 정상적인 포스트 백으로 정상적으로 처리하고 처리하기를 원합니다.

+0

당신이 옳은 것처럼 보입니다! 나는 내가 사용하고있는 Ajax 헬퍼 메소드가 자동으로 필요한 자바 스크립트 파일을 응답에 추가한다고 생각했다. 도! 감사. – Moskie

관련 문제