ASP.NET MVC, как реализовать ссылку, которая возвращает на предыдущую страницу? - PullRequest
5 голосов
/ 27 июня 2009

Название сказал все это.

Некоторый контекст:
У меня есть механизм поиска - представление поиска, представление результатов поиска и представление сведений (которое представляет один элемент результатов, например представление формы в веб-формах). Мне нужна ссылка в подробном представлении, которая вернула бы пользователя в представление результатов поиска.

Идеи
Просто прочитайте о TempData, но я думаю, что это не поможет, потому что пользователь может вызвать некоторые действия, прежде чем он захочет вернуться.

Сессия может работать, но я не уверен, как именно я должен с ней справиться.

Я не хочу использовать javascript для достижения этой цели.

Edit:
Кажется, я буду придерживаться решения eu-ge-ne. Вот результат:

#region usages

using System.Web.Mvc;
using CompanyName.UI.UIApp.Infrastructure.Enums;

#endregion

namespace CompanyName.UI.UIApp.Infrastructure.Filters
{
    /// <summary>
    /// Apply on action method to store URL of request in session
    /// </summary>
    public class RememberUrlAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting  
           (ActionExecutingContext filterContext)
        {
            var httpContext = filterContext.HttpContext;

            if (httpContext.Request.RequestType == "GET"
                && !httpContext.Request.IsAjaxRequest())
            {
                SessionManager
                .Save(SessionKey.PreviousUrl,
                      SessionManager.Get(SessionKey.CurrentUrl) ??
                      httpContext.Request.Url);

                SessionManager
                .Save(SessionKey.CurrentUrl,
                      httpContext.Request.Url);
            }
        }
    }
}

Кстати, как работает метод .IsAjaxRequest ()? Он понимает только MS AJAX или умнее этого?

Ответы [ 3 ]

5 голосов
/ 27 июня 2009

Я думаю, что вам нужно что-то вроде этого пользовательского фильтра (не тестировался - в настоящее время нет VS):

public class PrevUrlAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var httpContext = filterContext.HttpContext;
        var session = filterContext.HttpContext.Session;

        if (httpContext.Request.RequestType == "GET"
            && !httpContext.Request.IsAjaxRequest())
        {
            session["PrevUrl"] = session["CurUrl"] ?? httpContext.Request.Url;
            session["CurUrl"] = httpContext.Request.Url;
        }
    }
}
1 голос
/ 27 июня 2009

Вы можете просмотреть заголовок HTTP Referrer, чтобы получить предыдущий URL.

Конечно, вам придется обрабатывать изящно на случай, если пользователь не передаст это значение.

0 голосов
/ 27 июня 2009
<a href="javascript:go(-1)">Yo</a>

:)

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