我有一个由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响应中呈现页面。 我想重定向到一个动作。
答案 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);
}
希望这会有所帮助..