获取当前操作和控制器并将其用作Html.ActionLink中的变量?

时间:2013-11-04 23:18:21

标签: asp.net-mvc controller toggle asp.net-mvc-areas html.actionlink

我需要能够动态检索您所在页面的当前操作和控制器名称,并实际使用它们来创建一个新的HTML.ActionLink,它链接到相同的操作和控制器名称,但是在不同的位置区域。所以我想我需要将当前操作和控制器名称检索为变量,以用于构建新的HTML.ActionLink。

因此,如果我在www.site.com/about页面上,我需要动态生成链接到www.site.com/es/about页面。

我基本上在一个单独的区域文件夹中构建了我的网站的西班牙语翻译版本(具有相同的命名控制器和操作和视图,只是内容全部是西班牙语)。我需要用户能够在页面的英文版本(这是默认版本,并且位于根网站视图中)和西班牙语版本(其视图位于区域文件夹“es”)之间来回切换。他们目前所在的页面。我不能“硬编码”这些链接,因为我需要在共享的局部视图中使用它,这是我在每个页面上使用的_Layout中的_topNavigation。

如果我需要澄清,请告诉我。我确信在本地化应用程序时使用“区域”并不是真正的方法,但我仍然在努力教自己asp.net MVC。我阅读了许多有关本地化的教程和示例,我可能无法让它们工作或有意义。

我还应该补充一点,我已经知道如何使用HTML.ActionLink在这些区域之间来回切换。我已经设法为西班牙语区域中的任何视图以及默认站点中的任何视图创建正确的HTML.ActionLinks。所以这不是我的问题。

非常感谢任何帮助!谢谢!

3 个答案:

答案 0 :(得分:16)

使用ViewContext.RouteData确定当前的控制器和操作:

@Html.ActionLink("Spanish Version", 
                 ViewContext.RouteData.Values["action"] as String,
                 ViewContext.RouteData.Values["controller"] as String,
                 new { Area = "es" })

答案 1 :(得分:1)

试试这个:

 Html.ActionLink("Espanol", "action", "ControllerName", new { Area = "es" }, null)

答案 2 :(得分:0)

如果actionName仅用于@Html.ActionLink(),则可以简单地将"null"作为actionName传递。将使用当前的actionName。