某些背景信息:
我有一个搜索机制 - 搜索视图,搜索结果视图和详细信息视图(代表一个结果项,如webforms中的formview)。我想要一个详细信息视图中的链接,它会将用户返回到搜索结果视图。
观:
只是阅读有关TempData的信息,但我想这无济于事,因为用户可能会在他想要返回之前调用某些操作。
会话可能有效,但我不确定我应该如何处理它。
我不想使用javascript来完成此任务。
修改
似乎我会坚持使用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,还是比它更聪明?
答案 0 :(得分:5)
我认为你需要这样的自定义过滤器(未经过测试 - 目前没有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 :(得分:1)
您可以检查HTTP Referrer标头以检索以前的URL。
当然,只要用户没有传递此值,您就必须优雅地处理。
答案 2 :(得分:-2)
<a href="javascript:go(-1)">Yo</a>
:)