C# 如何在MVC中跟踪以前的URL
我有一个主页,其中有一些过滤器,当我返回这个主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页,我想返回网站
@Request.urlReferer
可以很容易地完成。但是,它只在返回到上一页时起作用,我在前两页中需要它
我可以使用Session[“ReturnToMainUrl”]=Request.urlreferer
进行设置,但只有在离开第一页时才进行设置
因此,如果我有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¶mB=bar&returnUrl=http:%2f%2fwww.example.com%2fpage0
Page 2: http://www.example.com/page2?paramC=baz¶mD=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¶mB=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;
}