2016-08-01 4 views
0

웹 응용 프로그램에 다국어를 구현하려고합니다.ASP MVC Request.UrlReferrer로 리디렉션

모든 것이 잘 작동했지만 일부 테스트 후에 나는 이상한 상호 작용을 발견했습니다.

내가 무엇을하려고했는지 먼저 설명해 드리겠습니다 ... 언어가 변경되면 웹 응용 프로그램에서 언어를 변경하려고했을 때 방문한 페이지로 사용자를 보내려고했습니다. 이것은 이것을 수행하는 데 사용 된 코드입니다.

모든 일 듯하지만, 하나의 컨트롤러/액션에,이 리디렉션은 비동기 요청으로 인정되기 전에 말했듯이
var returnPage = Request.UrlReferrer; 
     if (returnPage != null) 
     { 
      return Redirect(returnPage.ToString()); 
     } 
     return RedirectToAction("Index", "Home"); 

. 그러면 코드가 손상됩니다. 일부 "스파게티"로 문제를 해결할 수 있지만이 청소기를하고 싶습니다.

이제 리디렉션이 비동기 요청으로 인정되는 이유는 무엇입니까? 리디렉션과 UrlReferrer를 사용하지 않고 마지막으로 방문한 페이지로 사용자를 되돌릴 수있는 다른 방법이 있습니까?

+0

** 비동기 요청으로 ** 인정을 어떻게 ** 알고 계십니까? – Shyju

+0

디버그 모드에서 if 문을 통과합니다. if (Request.IsAjaxRequest()) .... – Ales

+0

그때 일어난 이전 호출은 무엇 이었습니까? –

답변

1

무엇을 다음과 같이 ...에 대한

컨트롤러 :

// after language is changed  
    if (Request.IsAjaxRequest()) { 
     return Json(new { 
     Success: true, 
     ReturnPage = returnPage ?? new UrlHelper(Request.RequestContext).Action("Index", "Home"); 
     }); 
    } 
    else { 
     if (returnPage != null) 
     { 
     return Redirect(returnPage.ToString()); 
     } 
     return RedirectToAction("Index", "Home"); 
    } 

보기 : 컨트롤러의 코드가 AJAX와 비 AJAX를 위해 일하는 것이

$.ajax({ 
    url: 'Settings/ChangeLanguage', 
    type: 'POST', 
    data: {lan: 'en'}, 
    success: function(result) { 
     if (result.Success) { 
      window.location = result.ReturnPage; 
     } 
    } 
}); 

그 방법 요청. 그러나 AJAX로만 호출하는 경우 json을 반환하는 코드 만 사용할 수 있습니다.