代码之家  ›  专栏  ›  技术社区  ›  Arnis Lapsa

ASP.NET MVC如何实现返回上一页的链接?

  •  5
  • Arnis Lapsa  · 技术社区  · 15 年前

    标题说明了一切。

    背景:
    我有一个搜索机制——搜索视图、搜索结果视图和详细信息视图(它表示一个结果项,就像Web表单中的表单视图)。我希望在详细信息视图中有一个链接,它将用户返回到搜索结果视图。

    思想 :
    只需阅读关于tempdata的内容,但我想这不会有帮助,因为用户可能会在想要返回之前调用一些操作。

    会话可能有效,但我不确定应该如何处理它。

    我不想用Javascript来完成这个任务。

    编辑:
    看来我会坚持欧盟的解决方案。结果如下:

    #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()方法如何工作?它只懂Ajax,还是比这更聪明?

    3 回复  |  直到 12 年前
        1
  •  5
  •   eu-ge-ne    15 年前

    我认为您需要类似于此自定义筛选器的内容(未测试-目前没有V):

    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;
            }
        }
    }
    
        2
  •  1
  •   Adrian Godong    15 年前

    可以检查http referer头以检索上一个URL。

    当然,您必须优雅地处理,以防用户没有传递这个值。

        3
  •  -2
  •   omoto    15 年前
    <a href="javascript:go(-1)">Yo</a>
    

    :)