2016-03-08 3 views
0

При нажатии на гиперссылку, я хочу перейти на страницу после применения бизнес-логики. В настоящее время 'return Redirect (Url)' в действии mvc не перемещается по странице.MVC redirect не переходит на страницу

$("a").bind("click", function (e) { 
     e.preventDefault(); 
     gotoUrl($, this.href); 
    }); 

gotoUrl: function ($, href) { 
    $.ajax({ 
      type: "POST", 
      url: 'mycontroller/myaction', 
      data: { url: href }, 
      dataType: 'json', 
      cache: false 
      success: function (data) { }   
     }); 
} 

//mycontroller 
[HttpPost] 
public ActionResult myaction(string url) 
{ 
    //Some business logic here to update url 
    return Redirect(url); 
} 

ответ

0

Для того, чтобы изменить текущее местоположение окна, вы должны определить, что ваш Аякса запрос перенаправляется (и вручную перенаправлять потом), то, что это невозможно, так как JQuery будет следовать перенаправлению. В аналогичной ситуации я применил следующее обходное решение, которое является более общим, но вы можете адаптировать его к вашим потребностям.

В global.asax создайте обработчик для Application_EndRequest, перехватив ответ перенаправления и переписав код ответа на что-то другое, представляющее ошибку, я использую код 422 - Unprocessable Entity.

protected void Application_EndRequest() 
{ 
if (Context.Response.StatusCode == 302 && Context.Request.IsAjaxRequest()) 
{ 
    Context.Response.StatusCode = 422; 
} 
} 

В вашем клиентском сценарии, то теперь вам нужно определить эти 422 ответов путем добавления общего АЯКС обработчика ошибок.

$(document) 
    .ajaxError(function (e, xhr, settings) { 
    if (xhr.status == 422) { 
    window.location = xhr.getResponseHeader('Location'); 
    } 
    }) 
Смежные вопросы