Ошибка перенаправления для Ajax Froms в asp.net mvc2 - PullRequest
1 голос
/ 31 августа 2010

Я создаю веб-сайт asp.net mvc2 и использую множество элементов формы ajax (точнее Ajax.BeginForm) для асинхронного заполнения данных на странице.Я хотел бы перенаправить пользователя на страницу входа через x времени бездействия на сайте.Когда я делаю это сейчас, либо через ActionExecutingContext, либо через HttpContext, страница входа заполняется в текущем элементе div для этой формы ajax вместо всей страницы.Есть мысли о том, как заставить его перенаправить текущую страницу?

Ответы [ 2 ]

2 голосов
/ 01 сентября 2010

Решение:

переопределяет событие 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);
            }
        }
    }
0 голосов
/ 31 августа 2010

Если вы хотите перенаправить пользователя на другую страницу (страницу входа) при отправке формы, зачем использовать 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.

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

Обновление:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...