【问题标题】:Getting the names of previous action and controller in MVC controller在 MVC 控制器中获取上一个动作和控制器的名称
【发布时间】:2011-08-17 03:33:27
【问题描述】:

我可以像这样获取当前动作和控制器的名称:

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

我还可以通过以下方式获取引用 URL:

string MyReferrer = Request.UrlReferrer.ToString();

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

【问题讨论】:

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


【解决方案1】:

这应该可以!

// 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('/'); 

【讨论】:

    【解决方案2】:

    asp.net mvc 不提供这个,因为 http 的无状态特性,但是你可以使用 session 或 cookie 来存储这个

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我可以通过以下方式获取引用 URL: string MyReferrer = Request.UrlReferrer.ToString(); ,但我不知道如何从 url 中提取名称?
      • 简单的方法是将“/”上的字符串拆分成一个数组,然后分别访问带有控制器和动作名称的槽。您还可以使用 AbsolutePath 属性 (Request.UrlReferrer.AbsolutePath) 来获取域之后的部分。当然,该操作可能存在也可能不存在,此时您需要对其进行测试并假设“索引”或您的默认操作是什么。
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        考虑使用 ASP.NET MVC TempData

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

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

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

        【讨论】:

          猜你喜欢
          • 2013-08-17
          • 1970-01-01
          • 2012-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-29
          • 2013-07-24
          相关资源
          最近更新 更多