10

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

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

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

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

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

任何帮助是极大的赞赏!谢谢!

4

3 回答 3

16

用于ViewContext.RouteData确定当前的 Controller 和 Action:

@Html.ActionLink("Spanish Version", 
                 ViewContext.RouteData.Values["action"] as String,
                 ViewContext.RouteData.Values["controller"] as String,
                 new { Area = "es" })
于 2013-11-05T17:37:53.357 回答
1

尝试这个:

 Html.ActionLink("Espanol", "action", "ControllerName", new { Area = "es" }, null)
于 2013-11-04T23:27:47.187 回答
0

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

于 2018-07-27T08:30:56.633 回答