标题说了这一切.
一些背景:
我有一个搜索机制 – 搜索视图,搜索结果视图和详细信息视图(代表一个结果项,如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,还是比它更聪明?
解决方法
我认为你需要这样的自定义过滤器(未经过测试 – 目前没有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; } } }