當例如發生某種異常或授權失敗時,我想重定向到操作方法中的另一個頁面。這對於普通請求不是問題,但是當通過Ajax發出請求時,重定向失敗。 許多人似乎建議我應該送回JavaScriptResult
並更改document.location
,但我不確定這是否是最佳解決方案。有沒有其他方法可以實現這一目標?謝謝。如何在發出Ajax請求時在ASP.MVC中重定向?
P.S.我正在使用ASP.NET MVC v1.0。
當例如發生某種異常或授權失敗時,我想重定向到操作方法中的另一個頁面。這對於普通請求不是問題,但是當通過Ajax發出請求時,重定向失敗。 許多人似乎建議我應該送回JavaScriptResult
並更改document.location
,但我不確定這是否是最佳解決方案。有沒有其他方法可以實現這一目標?謝謝。如何在發出Ajax請求時在ASP.MVC中重定向?
P.S.我正在使用ASP.NET MVC v1.0。
通過AJAX做「重定向」的唯一方法是使用javascript,無論您是否使用在JSON中設置位置或新URL的腳本傳回JavaScriptResult,並在回調處理程序中設置位置。我認爲這個選擇實際上取決於你如何處理請求的結果。如果它總是要重定向,那麼我只需要在沒有AJAX的情況下發出請求。如果通常情況下,您會返回放在頁面上的HTML,那麼JavaScriptResult可能會更好。如果您通常獲取JSON並通過代碼更新頁面,那麼我會發回一個包含URL的JSON響應,並讓回調處理程序設置位置。
謝謝。 JavaScriptResult選項似乎是一種破解,因此我將使用JSON選項,它看起來更清晰。 – Zoman 2010-02-13 23:52:51
我試圖做同樣的事情,這個網址對我來說是一個很大的幫助。我稍微修改了它,以便它可以與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);
}
}
}
}
你是否想讓請求改變的頁面?或您的AJAX請求的目的地?如果你在瀏覽器中改變下面的答案是一種方式。 – 2010-02-13 22:13:49