2016-08-01 2 views
0

Я пытаюсь реализовать многоязычность в своем веб-приложении.ASP MVC Перенаправление на Request.UrlReferrer

Все работало нормально, но после некоторых испытаний я наткнулся на какое-то странное взаимодействие.

Позвольте мне сначала объяснить, что я пытался сделать ... Когда язык был изменен, я попытался вернуть пользователя на страницу, которую он посетил, когда он попытался изменить язык в веб-приложении. Это код, который я использовал для этого.

var returnPage = Request.UrlReferrer; 
     if (returnPage != null) 
     { 
      return Redirect(returnPage.ToString()); 
     } 
     return RedirectToAction("Index", "Home"); 

Как я уже сказал все, казалось, работало, но на одном контроллер/действие, это редирект признается как запрос асинхронным. Который затем разбивает код. Я мог бы решить проблему с помощью некоторых «спагетти», но я хочу сделать это чище.

Теперь почему Redirect иногда подтверждается как запрос Async? Есть ли другой способ вернуть пользователя на последнюю посещенную страницу без использования Redirect и 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({ 
    url: 'Settings/ChangeLanguage', 
    type: 'POST', 
    data: {lan: 'en'}, 
    success: function(result) { 
     if (result.Success) { 
      window.location = result.ReturnPage; 
     } 
    } 
}); 

Таким образом, код в контроллер будет работать на AJAX и не-AJAX Запросы. Но если вы только вызываете его с помощью AJAX, вы можете использовать только код, который возвращает json.

Смежные вопросы