Error Redirect for Ajax Froms in asp.net mvc2

I'm building an asp.net mvc2 website and using a lot of ajax form elementes (Ajax.BeginForm to be exact) to asynchronously populate data on the page. I would like to redirect the user to the sign in page after x amount of time of inactivity on the site. When I do this currently, either through ActionExecutingContext, or HttpContext, the sign in page is populated in the current div element for that ajax form, instead of the entire page. Any thoughts on how to get it to redirect the current page?

1
задан Justin Williams 31 August 2010 в 15:14
поделиться

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);
            }
        }
    }
2
ответ дан 2 September 2019 в 21:41
поделиться

Если вы хотите перенаправить пользователя на другую страницу (страницу входа) при отправке формы, то зачем использовать ajax? AJAX лучше всего использовать для манипулирования не частью страницы, а всей страницей.

Ajax.BeginForm имеет объект option для указания идентификатора обновляемого элемента HTML и типа обновления

пример

Ajax.BeginForm("Create", "Project", 
                new AjaxOptions() { 
                                   UpdateTargetId = "projectform", 
                                   InsertionMode = InsertionMode.Replace, 
                                   HttpMethod = "Post" })

Параметр InsertionMode имеет три значения Replace, InsertAfter, InsertBefore

В вашем случае я не знаю, можете ли вы настроить таргетинг на тег HTML в UpdateTargetId. но, как я уже говорил ранее, в этом сценарии лучше использовать обычный запрос, а не обновлять всю страницу с помощью Ajax.

о перенаправлении пользователя на страницу входа после определенного времени бездействия. Я считаю, что Sessions — правильный способ сделать это. Хотя я не уверен, как это делается.

Обновление:

я надеюсь, что эта ссылка поможет: http://blog.tallan.com/2010/06/25/handle-asp-net-mvc-session-expiration/

0
ответ дан 2 September 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: