如何在MVC中跟踪先前的Urls

罗杰·奥利维拉(Roger Oliveira)

我有一个主页,其中包含一些返回到主URL时要保留的过滤器。但是在加载其他页面后,我想返回。通过获取即可轻松完成@Request.UrlReferrer但是,它仅在返回上一页时有效,我需要前两页使用。

我可以通过使用Session["ReturnToMainUrl"] = Request.UrlReferrer但只能在离开第一页时进行设置来实现。

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

  1. WebSite \ page1?Filter = ABC
  2. 网站\ page2
  3. 网站\第3页

  4. 我现在在第2页还是第3页上,我想返回到Website \ page1?Filter = ABC

当我进入第3页时,我可以Request.UrlReferrer用来返回第2页,但是当我返回第1页时,我需要保留参数,以便从会话中加载。

如何不使用会话以更智能的方式进行操作?

鞘脂蛋白

returnUrl当您逐页进行时,应以递归方式构建查询字符串参数。

例如:https//dotnetfiddle.net/HtoX6b

var page0 = new Uri("http://www.example.com/page0");
Console.WriteLine("Page 0: {0}", page0);

var page1 = new Uri("http://www.example.com/page1?paramA=foo&paramB=bar&returnUrl=" + HttpUtility.UrlEncode(page0.ToString()));
Console.WriteLine("Page 1: {0}", page1);

var page2 = new Uri("http://www.example.com/page2?paramC=baz&paramD=qux&returnUrl=" + HttpUtility.UrlEncode(page1.ToString()));
Console.WriteLine("Page 2: {0}", page2);


var page2ReturnUrl = HttpUtility.ParseQueryString(page2.Query)["returnUrl"];
Console.WriteLine("Return to page 1 from page 2: {0}", page2ReturnUrl);

var page1ReturnUrl = HttpUtility.ParseQueryString(page1.Query)["returnUrl"];
Console.WriteLine("Return to page 0 from page 1 : {0}", page1ReturnUrl);

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

这可能会持续进行很多层次,但是推导上一页URL的过程始终是相同的-只需解码returnUrl参数即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章