2014-02-18 79 views
0

我有一個由ajax請求調用的方法。實施了由ActionFilterAttribute繼承的SessionExpireFilter。我想在SesssionExpireFilter的失敗情況下重定向到另一個操作。我的代碼如下。通過ActionFilterAttribute通過Ajax調用重定向到MVC操作

方法

[HttpPost] 
     [SessionExpireFilter] 
     public string SaveInstitute(int id, string category, string institute) 
     { 

      return DBMethodWeb.SaveInstitute(id, Convert.ToInt32(category), institute); 

     } 

SessionExpireFilter

public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      HttpContext ctx = HttpContext.Current; 

      if (HttpContext.Current.Session[SessionManagement.SchoolId] != null) 
      { 

      } 

      else 
      { 
       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index" })); 
       // HttpContext.Current.Response.Redirect(@"~/Home/Index"); 
      } 




      base.OnActionExecuting(filterContext); 
     } 

其渲染Ajax響應的頁面。 我想重定向到一個操作。

回答

1

而不是在服務器端重定向,您可以在客戶端的重定向,如下圖所示 -

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 
<script> 
    function callme(data) { 
     window.location.href = data; 
    } 
</script> 

@using (Ajax.BeginForm("YourActionName", new AjaxOptions { OnSuccess = "callme" })) 
{ 
    <div> 
     <input type="submit" value="Click me" /> 
    </div> 
} 

你ActionFilter應該返回一個JsonResult如下 -

public class SessionExpireFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.Result = new JsonResult() { Data = "http://www.google.com", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; 
     base.OnActionExecuting(filterContext); 
    } 
} 

出於測試目的,我用以下行動 -

[SessionExpireFilter] 
public ActionResult YourActionName() 
{ 
    return View(); 
} 

最後,我的網頁得到了成功的重定向。

注意:即使我們通過代碼而不是AJAX形式創建JQuery AJAX請求,也可以使用同樣的示例。我們所需要做的就是處理成功功能。

+0

謝謝@ramiramilu其作品gr8。 –

+0

@developersatish,謝謝,我很高興我解決了你的問題。如果我的文章幫助了你,請標記它的答案,以便對其他人有所幫助。 – ramiramilu

0

你可以試試這個:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      HttpContext ctx = HttpContext.Current; 

      if (HttpContext.Current.Session[SessionManagement.SchoolId] != null) 
      { 
      } 
      else 
      { 
       filterContext.Result = new ViewResult 
      { 
       ViewName = "you path for particular view" 
      }; 

      } 
      base.OnActionExecuting(filterContext); 
     } 

希望這有助於..