Как я могу перенаправить в ASP.MVC, когда сделан запрос Ajax? - PullRequest
1 голос
/ 14 февраля 2010

Я хотел бы перенаправить на другую страницу в методе действия, когда, например, происходит определенное исключение или происходит сбой авторизации. Это не проблема с обычными запросами, однако, когда запрос выполняется через Ajax, перенаправление завершается неудачно. Многие люди, кажется, предлагают, чтобы я отправил обратно JavaScriptResult и изменил document.location, но я не уверен, что это лучшее решение. Есть ли альтернативные способы достижения этого? Спасибо.

P.S. Я использую ASP.NET MVC v1.0.

Ответы [ 2 ]

5 голосов
/ 19 августа 2010

Я пытался сделать то же самое, и этот URL мне очень помог. Я немного изменил его, чтобы он работал как с RedirectResult, так и с Redirect.

http://craftycodeblog.com/2010/05/15/asp-net-mvc-ajax-redirect/

Просто все ваши контроллеры наследуются от этого базового контроллера.

 public abstract class MyBaseController : Controller {

            protected override RedirectToRouteResult RedirectToRoute(string routeName, System.Web.Routing.RouteValueDictionary routeValues) {
                return new AjaxAwareRedirectResult(Url, routeName, routeValues);
            }

            public class AjaxAwareRedirectResult : RedirectToRouteResult {
                public AjaxAwareRedirectResult(UrlHelper url, string routeName, System.Web.Routing.RouteValueDictionary routeValues)
                    : base(routeName, routeValues) {
                    this.url = url;
                }

                private readonly UrlHelper url;

                public override void ExecuteResult(ControllerContext context) {
                    if (context.RequestContext.HttpContext.Request.IsAjaxRequest()) {
                        string destinationUrl = url.RouteUrl(base.RouteName, base.RouteValues);
                        JavaScriptResult result = new JavaScriptResult()
                        {
                            Script = "window.location='" + destinationUrl + "';"
                        };
                        result.ExecuteResult(context);
                    } else {
                        base.ExecuteResult(context);
                    }
                }
            }

        }
3 голосов
/ 14 февраля 2010

Единственный способ выполнить «перенаправление» через AJAX - это использовать javascript, независимо от того, передаете ли вы JavaScriptResult с помощью скрипта, который устанавливает местоположение или новый URL-адрес в JSON, и задаете местоположение в обработчике обратного вызова. Я думаю, что выбор действительно зависит от того, как вы будете обрабатывать результат запроса в противном случае. Если он всегда будет перенаправлять, я бы просто сделал запрос без AJAX. Если обычно вы возвращаете HTML, который помещается на страницу, тогда JavaScriptResult может быть лучше. Если вы, как правило, получаете JSON и обновляете страницу с помощью кода, я бы отправил обратно ответ JSON, содержащий URL-адрес, и позволил обработчику обратного вызова установить местоположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...