获取MVC控制器中先前操作和控制器的名称

时间:2011-08-17 03:33:27

标签: c# asp.net-mvc asp.net-mvc-2

我可以获得当前操作和控制器的名称,如:

string controllername = this.ValueProvider.GetValue("controller").RawValue.ToString();
string actionname = this.ValueProvider.GetValue("action").RawValue.ToString();

此外,我可以通过以下方式获取reffer url: string MyReferrer = Request.UrlReferrer.ToString();

但是如何在mvc2控制器中获取先前操作和控制器的名称?

5 个答案:

答案 0 :(得分:11)

这应该有效!

// Home is default controller
var controller = (Request.UrlReferrer.Segments.Skip(1).Take(1).SingleOrDefault() ?? "Home").Trim('/'); 

// Index is default action 
var action = (Request.UrlReferrer.Segments.Skip(2).Take(1).SingleOrDefault() ?? "Index").Trim('/'); 

答案 1 :(得分:0)

由于http的无状态特性,asp.net mvc不提供此功能,但你可以使用session或cookie存储它

答案 2 :(得分:0)

我的第一次尝试是解析请求对象中引用URL的上一个路径。

答案 3 :(得分:0)

将此值存储在tempdata中或查找引用路由(通过url)以获取实际路由对象,然后查看其控制器和操作属性。为了实现这一点,您需要能够从URL查找路由。要做到这一点,请参阅Phil Haacks代码(还有其他代码)来查找路线。列出了各种方法:

http://blogs.msdn.com/b/simonince/archive/2011/01/28/unit-testing-asp-net-mvc-routes.aspx

答案 4 :(得分:0)

考虑使用 ASP.NET MVC TempData

http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

它将为您提供当前请求和下一个请求的持久性,因此您可以存储路由信息,例如上次调用的操作。

在处理下一个请求后,TempData中的数据将从内存中释放(与ASP.NET会话对象相反,会在会话超时或终止时释放内存)。