Asp.net mvc 如何在ASP.NET MVC中找到操作路由到的位置?

Asp.net mvc 如何在ASP.NET MVC中找到操作路由到的位置?,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我认为这个标题没有任何意义,所以我希望我能解释得足够好 我有一个控件项和操作EditItem。EditItem从许多位置路由到,例如 /Item/Browse/ByCategory /Item/Browse/ByType /Item/Browse/ByWhatever 我真正想要的是将用户返回到他单击某个项目的编辑页面 我知道我可以通过为EditItem操作传递?ReturnUrl参数来实现这一点,但我一直在想,是否有可能找到用户来自何处,比如referer…除了传递ReturnUrl或检查H

我认为这个标题没有任何意义,所以我希望我能解释得足够好

我有一个控件项和操作EditItem。EditItem从许多位置路由到,例如

/Item/Browse/ByCategory
/Item/Browse/ByType
/Item/Browse/ByWhatever
我真正想要的是将用户返回到他单击某个项目的编辑页面


我知道我可以通过为EditItem操作传递?ReturnUrl参数来实现这一点,但我一直在想,是否有可能找到用户来自何处,比如referer…

除了传递ReturnUrl或检查
HttpContext.Current.Request.referer
属性之外,没有其他方法。但是
Referer
为您提供了需要解析以执行操作的字符串值

啊,但当然一切都有可能。在您的控制器(或者最好是基本控制器)中,重写OnActionExecuted和OnActionExecuting,并将您以前的URL放入会话中。在从具有此实现的控制器继承的任何控制器中使用会话变量(如果不从自定义基继承,则仅使用此控制器)


刚刚创建了测试解决方案,所以我相信这会起作用。 1) 在默认路由之前创建新路由:

routes.MapRoute("EditItem",
   "EditItem/{referrer}/{id}",
   new {controller = "Item", action = "EditItem",id = "",referrer = "ByCategory"}
);
2) 使用此链接编辑3个视图中的任意一个视图上的项目:

<%= Html.RouteLink("Edit Item 1", "EditItem", 
    new {referrer = ViewContext.RouteData.Values["action"], id = 1}) %>

3) 在EditItem视图上使用此后退按钮:

<%= Html.RouteLink("Back", "Default", 
    new { action = ViewContext.RouteData.Values["referrer"]})%>


使用路由可以使URL更加美观和用户友好。

会话可能会过期,您将丢失回页地址信息。在某些环境中,ReferreURL可能无法工作。例如,如果像IE这样的浏览器具有强大的安全选项,并且不将此信息发送到服务器。在那种情况下,这是行不通的。此外,使用HTTPS可能也不会在服务器上发送此信息。
<%= Html.RouteLink("Back", "Default", 
    new { action = ViewContext.RouteData.Values["referrer"]})%>