通过ActionFilterAttribute通过Ajax调用重定向到MVC操作

时间:2014-02-18 10:17:42

标签: jquery ajax asp.net-mvc

我有一个由ajax请求调用的方法。实施了由SessionExpireFilter继承的ActionFilterAttribute。我想在SesssionExpireFilter中重定向到另一个失败条件的操作。我的代码如下。

方式

[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响应中呈现页面。 我想重定向到一个动作。

2 个答案:

答案 0 :(得分: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请求,相同的示例也会起作用。我们需要做的就是处理成功函数。

答案 1 :(得分: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);
        }

希望这会有所帮助..