C# 如何在MVC中跟踪以前的URL

C# 如何在MVC中跟踪以前的URL,c#,asp.net-mvc,url,C#,Asp.net Mvc,Url,我有一个主页,其中有一些过滤器,当我返回这个主url时,我想保留这些过滤器。但在加载另一个页面后,我想返回。通过获取@Request.urlReferer可以很容易地完成。但是,它只在返回到上一页时起作用,我在前两页中需要它 我可以使用Session[“ReturnToMainUrl”]=Request.urlreferer进行设置,但只有在离开第一页时才进行设置 因此,如果我有3个级别: 网站\page1?过滤器=ABC 网站\page2 网站\page3 我现在在第2页或第3页,我想返回网站

我有一个主页,其中有一些过滤器,当我返回这个主url时,我想保留这些过滤器。但在加载另一个页面后,我想返回。通过获取
@Request.urlReferer
可以很容易地完成。但是,它只在返回到上一页时起作用,我在前两页中需要它

我可以使用
Session[“ReturnToMainUrl”]=Request.urlreferer
进行设置,但只有在离开第一页时才进行设置

因此,如果我有3个级别:

  • 网站\page1?过滤器=ABC
  • 网站\page2
  • 网站\page3

  • 我现在在第2页或第3页,我想返回网站\page1?Filter=ABC

  • 当我在第3页时,我可以使用
    Request.urlReferer
    返回第2页,但当我返回第1页时,我需要保留参数,以便从会话加载


    我怎样才能不使用会话,以更智能的方式完成这项工作?

    当您从一页转到另一页时,应该递归地构建一个
    returnUrl
    查询字符串参数

    例如:



    这可能会深入到很多层次,但是获取上一页URL的过程总是一样的——只需解码
    returnUrl
    参数。

    试试这个解决方案,它是有效的

    ClassIndex模型:

    公共类ClassIndex{public int Id{get;set;}}

    视图:

    _Layout.cshtml

    <body>
    
        <a href="/Home/Back/">Back</a>
        <br />
        <a href="/Home/Index/1">Index 1 </a> | <a href="/Home/Index/2">Index 2 </a> | <a href="/Home/Index/3">Index 3 </a>
        @RenderBody()
    </body>
    

    使用参数
    returnUrl
    ,并将其传递到要从中返回的页面。在您的情况下,您必须从
    page1->page2->page3
    传递它。在第3页上,现在重定向到ReturnUrl这可能适用:是的,但是,从第3页它只转到第2页,因此我可以使用urlrefferer。。唯一的问题是什么时候回到第2页转到第1页。因此,我认为传递两次returnUrl太糟糕了:(. @Ruchan@BrendanGreen这和那个问题有点不同,就像用枪杀死蚊子一样,我需要一些简单的好方法。多次传递returnUrl没有害处。如果你觉得这个方法不方便,那么除了使用javascr之外,其他可能是使用
    会话
    cookie
    ipt代码历史记录。go(-1),此解决方案为功能提供了更多控制。
    Page 0: http://www.example.com/page0
    Page 1: http://www.example.com/page1?paramA=foo&paramB=bar&returnUrl=http:%2f%2fwww.example.com%2fpage0
    Page 2: http://www.example.com/page2?paramC=baz&paramD=qux&returnUrl=http:%2f%2fwww.example.com%2fpage1%3fparamA%3dfoo%26paramB%3dbar%26returnUrl%3dhttp:%252f%252fwww.example.com%252fpage0
    
    Return to page 1 from page 2: http://www.example.com/page1?paramA=foo&paramB=bar&returnUrl=http:%2f%2fwww.example.com%2fpage0
    Return to page 0 from page 1 : http://www.example.com/page0
    
    <body>
    
        <a href="/Home/Back/">Back</a>
        <br />
        <a href="/Home/Index/1">Index 1 </a> | <a href="/Home/Index/2">Index 2 </a> | <a href="/Home/Index/3">Index 3 </a>
        @RenderBody()
    </body>
    
        public ActionResult Index(ClassIndex idx)
        {
            return View(idx);
        }
    
        public ActionResult Back()
        {
            var pageNumber = getPageUrl();
            if (pageNumber == "/") pageNumber = "1";
    
            return View("Index", 
                 new ClassIndex { Id = Convert.ToInt32(pageNumber) });
        }
    
        string getPageUrl()
        {
            Dictionary<int, string> items = (Dictionary<int, string>)ControllerContext.RequestContext.HttpContext.Items[key];
            var lastItem = items.LastOrDefault();
            var returnUrl = lastItem.Value;
            if (string.IsNullOrEmpty(returnUrl)) returnUrl = "1";
    
            items.Remove(lastItem.Key);
    
            return returnUrl.Replace("/Index/", "");
        }
    }
    
     void Application_BeginRequest(object sender, EventArgs e)
            {
                var key = "ItemKey";
                if (!HttpContext.Current.Request.RawUrl.Contains("Back"))
                {
                    indexes.Add(++counter, HttpContext.Current.Request.RawUrl.Replace("/Home", ""));
                }
                HttpContext.Current.Items[key] = indexes;
            }