我正在构建一个asp.net mvc2网站并使用大量的ajax表单元素(准确地说是Ajax.BeginForm)来异步填充页面上的数据。我想在网站上x不活动的时间后将用户重定向到登录页面。当我这样做时,无论是通过ActionExecutingContext还是HttpContext,登录页面都填充在该ajax表单的当前div元素中,而不是整个页面。有关如何让它重定向当前页面的任何想法吗?
答案 0 :(得分:2)
解决方案:
覆盖基本控制器中的OnActionExecuted事件,并创建一个RedirectResult以在需要重定向的任何地方调用。添加以下代码:
protected RedirectResult Redirect(string url, ActionExecutedContext filterContext)
{
return new AjaxErrorRedirectResult(url, filterContext);
}
public class AjaxErrorRedirectResult : RedirectResult
{
public AjaxErrorRedirectResult(string url, ActionExecutedContext filterContext)
: base(url)
{
ExecuteResult(filterContext.Controller.ControllerContext);
}
public override void ExecuteResult(ControllerContext context)
{
if (context.RequestContext.HttpContext.Request.IsAjaxRequest())
{
string redirectUrl = "www.google.com";
JavaScriptResult result = new JavaScriptResult()
{
Script = "self.parent.location='" + redirectUrl + "';"
};
result.ExecuteResult(context);
}
else
{
base.ExecuteResult(context);
}
}
}
答案 1 :(得分:0)
如果要在提交表单时将用户重定向到另一个页面(登录页面),那么为什么要使用ajax? AJAX最适合用于操作页面的一部分而不是整个页面。
Ajax.BeginForm有一个选项对象,用于指定要更新的HTML元素的ID和更新的类型
例如
Ajax.BeginForm("Create", "Project",
new AjaxOptions() {
UpdateTargetId = "projectform",
InsertionMode = InsertionMode.Replace,
HttpMethod = "Post" })
InsertionMode选项有三个值Replace
,InsertAfter
,InsertBefore
在您的情况下,我不知道您是否可以在UpdateTargetId中定位HTML标记。但正如我之前所说,在这种情况下使用正常请求更好,而不是使用Ajax更新整个页面。
关于在一段时间不活动后将用户重定向到登录页面。我相信塞申斯是做到这一点的正确方法。我不确定它是如何完成的。
更新:
我希望此链接有助于: http://blog.tallan.com/2010/06/25/handle-asp-net-mvc-session-expiration/