Tytuł powiedział wszystko.ASP.NET MVC, jak zaimplementować link, który powraca do poprzedniej strony?
Niektóre kontekst:
mam mechanizm wyszukiwania - widok wyszukiwania, widok wyników wyszukiwania oraz widoku szczegółów (co stanowi jedną pozycję wyników, jak FormView w webforms). Chcę wyświetlić widok linku w widoku szczegółów, który spowoduje powrót użytkownika do widoku wyników wyszukiwania.
Pomysły:
Wystarczy przeczytać o TempData, ale myślę, że nie pomoże, bo użytkownik może wywołać pewne działania, zanim on chce powrócić.
Sesja może działać, ale nie jestem pewna, jak powinienem sobie z tym poradzić.
Nie chcę używać javascript, aby to osiągnąć.
Edit:
Wydaje się, że będę trzymać roztworem eu-ge-ne`s. Oto wynik:
#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);
}
}
}
}
Btw, jak działa metoda .IsAjaxRequest()? Rozumie tylko MS AJAX lub jest mądrzejszy?
Czasami warto wyjaśnić, że nie chcesz używać javascript ... przynajmniej zakładam, że nie chcesz tego zrobić? –
W rzeczywistości nie widzę sposobu, w jaki javascript mógłby pomóc. Nawet może, jestem ostrożny wobec js, jeśli jest to związane z nawigacją, ponieważ wyszukiwarki nie rozumieją js. –
"jak działa metoda .IsAjaxRequest()?" - W żądaniu szuka "X-Requested-With". Powinien pracować z MSAjax i jQuery. Spójrz na źródło MVC ASP.NET -> AjaxRequestExtension.cs –