2010-06-23 2 views
4

MVC에서 어떻게 AJAX 양식에서 페이지 시간 초과를 올바르게 처리 할 수 ​​있습니까? 현재 AJAX 양식을 제출할 때 AJAX 양식의 DOM은 로그인 페이지 콘텐츠로 대체됩니다. 전체 페이지를 로그인 페이지로 리디렉션하고 싶습니다.AJAX 양식 (Ajax.BeginForm)의 로그인 페이지로 어떻게 리디렉션합니까?

Ajax 양식 (AJAX.BeginForm) 내에 부분 양식이있는 ASP.Net MVC 응용 프로그램이 있습니다. 응용 프로그램이 Windows Form 인증을 사용 중입니다. 일반적으로 웹 사이트가 시간 종료되면 로그인 페이지로 올바르게 리디렉션됩니다. 그러나 AJAX 양식이 제출되고 웹 사이트 시간이 초과되면 MVC는 로그인 페이지를 AJAX 양식의 내용으로 반환합니다. 컨트롤러 동작 방법에는 절대로 도달하지 않습니다. 같은 결과 JQuery.load 시도했다.

컨트롤러

public ActionResult Index() 
    { 
     ViewData["Now"] = DateTime.Now.ToString("HH:mm:ss"); 
     return View("Index"); 
    } 
    public ActionResult AjaxTimeout() 
    { 
     ViewData["Now"] = DateTime.Now.ToString("HH:mm:ss"); 
     return PartialView("AjaxTimeout"); 
    } 

Timeout.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 
<html> 
<head> 
<script src="/Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script> 
</head> 
<body> 
    Parent page: 
    <div id="ajaxtimeout" style="height:300px; width:300px;"> 
    <%= Html.Partial("AjaxTimeout") %> 
</div> 
</body> 
</html> 

AjaxTimeout.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<% using (Ajax.BeginForm("AjaxTimeout", new AjaxOptions { UpdateTargetId = "ajaxtimeout"})) { %> 
    Return Time: <%= ViewData["Now"] %> 
    <input type="submit" value="Submit" /> 
<% } %> 

답변

3

우리가 일반적으로에 대한 jQuery를 사용할 때 내가, 우리의 애플 리케이션에 대한 Microsoft 스크립트를 사용하지 않는 모든 것이므로 특정 상황에 대해이 솔루션을 조사해야 할 필요가 있지만 해결 방법은 다음과 같습니다.

아약스 사용 가능 애플리케이션이있을 때마다 jQuery의 $ .ajax 함수를 래퍼로 사용하여 모든 아약스 요청을 처리한다. Ajax 요청을 한 코드에 대한 응답을 반환하기 전에 래퍼 메서드 내부에서 401 응답을 확인하여 인증 시간이 초과되었는지 확인합니다. 그렇다면 전체 창에서 로그인 페이지로 리디렉션됩니다.

// The error handler for the ajax request. 
      error: function (objXHR, status, errorThrown) { 
... 
       // Redirect to login if the ajax request returned a 401 
       if (objXHR.status == "401") { 
        window.location.reload(); 
        return; 
       } 
... 
      } 

마이크로 소프트 버전의 아약스 호출에 오류 처리기를 추가 할 수 있다면 비슷한 것을 할 수 있습니다.

+0

나는 이것을 시도 할 것이지만 JQuery로 모든 것을 옮기는 것은 선택 사항이 아니다. 나는 JQ에서 조금 초록색입니다. $ .ajax (즉, 링크) 주위에 '래퍼'를 추가하는 방법을 가르쳐 주시겠습니까? 그리고 MVC/AJAX에서이 작업을 수행 한 사람이 있습니까? BeginForm? – davewilliams459

+0

생각해 보니 AJAX.BeginForm onsuccess JS 함수가 이것을 처리 할 수 ​​있는지 궁금하지만, 반환 상태가 401인지 여부를 알아야합니다. – davewilliams459

+0

래퍼는 함수 또는 클래스 전체에서 사용할 수있는 클래스입니다. 문제의 메소드를 호출하는 app. 메소드로 /부터 나가는 데이터에 대해 설정 및 사전/사후 처리를 수행 할 수 있습니다. – womp

관련 문제