2012-06-11 2 views
0

MVC3 응용 프로그램을 작성 중이며 페이지 중 하나에 페이징 및 정렬이있는 테이블에 표시된 항목 목록을 가져 왔습니다.MVC 3 Ajax 양식 On UAT 서버에서 오류가 발생하지 않음

그러나 다시 구매 한 레코드가 특정 번호를 초과하는 경우 사용자에게 검색을 구체화하라는 메시지를 표시하려고합니다.

위의 조건이 충족되면 컨트롤러에서 Response.StatusCode을 변경하여 구현했습니다.

public PartialViewResult VerbatimGridUpdate(VerbatimFormModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var mod = ModelBuilder.GetVerbatimFormModel(model); 

     if (mod.Verbatims.Count() > 10000) 
     { 
      HttpContext.Response.StatusCode = 33; 
     } 

     return PartialView("_VerbatimGrid", mod); 
    } 
    else 
    { 
     return PartialView(model.Verbatims); 
    } 
} 

내 마크 업에서 Ajax 양식의 OnFailure 이벤트를 사용하여이 실패를 포착합니다.

function FailureLoading(ajaxContext) { 
     if (ajaxContext.status == "33") { 
      var ul = $("#validationSummary ul"); 
      $("ul").empty(); 
      ul.append("<li>" + "Too many records returned, please refine your search." + "</li>"); 
     } 
    } 

</script> 

<div class="filters" > 
    @using (Ajax.BeginForm("VerbatimGridUpdate", null, new AjaxOptions { HttpMethod= "Get", UpdateTargetId = "grid-container", OnBegin = "StartLoading", OnSuccess = "FinishLoading", OnFailure="FailureLoading"}, new { id = "VerbatimListForm", name="VerbatimListForm" })) 
    { 

모든 것이 잘 로컬하지만 최대한 빨리 우리 UAT 서버에 배포로 작동 실패 이벤트가 해고되지 않고 모든 레코드가 표시됩니다. 나는 왜 내가이 행동의 차이를 얻고 있는지 알 수 없다. 어떤 아이디어라도 가장 환영받을 것입니다. 고맙습니다. 이것은 여러 가지 이유로 발생 될 수

+0

HTTP 응답을 검사 할 때 반환되는 상태 코드는 무엇입니까? 33 또는 다른 것? – avesse

+0

반환 된 상태 코드는 200 – saj

+0

입니다. 그러면 IIS가 상태 코드를 무시할 것입니다. http://stackoverflow.com/questions/434272/iis7-overrides-customerrors-when-setting-response-statuscode를 참조하십시오 (그러나 아래의 Mark의 대답에 동의하며 HTTP 상태 코드는 잘못된 방법입니다). – avesse

답변

0

은 몇 가지 일반적인 것들이다 : 클라이언트와 서버 사이의

  • 다른 도메인입니다.

기본적으로 AJAX 호출은 도메인 간 액세스를 허용하지 않습니다. 이 문제에 대한 해결책은 here입니다.

  • 상대 경로와 절대 경로.

은 때때로 당신은 개발 서버는 http://myUatserver/myApp/myController/myAction 같은 같은 http://localhost/myController/myAction 다음 UAT가 될 것입니다 뭔가있을 것입니다.

/myController/myAction과 같은 절대 루트 경로를 사용하는 경우 호스트 루트로 이동하여 URL을 찾지 않습니다. Ajax.BeginForm()에 컨트롤러 & 동작을 명시 적으로 포함 시키십시오.

Firebug 또는 Chrome의 개발 도구와 같은 디버거를 사용하여 Ajax 호출이 이루어지는 위치를 확인하고 XHR 호출을 찾을 수 있습니다.

1

맞지 않겠지 만 그 목적을 위해 사용자 정의 http 상태 코드를 사용해서는 안됩니다. 무엇보다 먼저 사용자에게 정보가 더 많은 레코드가 있다는 사실을 전하는 것이 오류 다. 당신은이 상태를 말한다 부분보기에 당신이 부분보기에서 숨겨진 필드를 읽고 상태에 따라 사용자에게 정보를 업데이트해야하는 onSuccess 방법에 사용 숨겨진 필드을 가질 수

.

관련 문제