【发布时间】:2013-11-15 17:53:37
【问题描述】:
我需要能够动态检索您当前所在页面的当前操作和控制器名称,并实际使用它们来创建一个新的 HTML.ActionLink,它链接到相同的操作和控制器名称,但使用不同的名称区域。所以我想我需要检索当前的动作和控制器名称作为变量来构建一个新的 HTML.ActionLink。
因此,如果我在 www.site.com/about 页面上,我需要动态生成指向 www.site.com/es/about 页面的链接。
我基本上在一个单独的区域文件夹中构建了我的网站的西班牙语翻译版本(具有相同名称的控制器、操作和视图,只是内容都是西班牙语)。我需要用户能够在页面的英文版本(这是默认设置,并且驻留在根站点视图中)和西班牙语版本(其视图驻留在区域文件夹“es”中)之间来回切换他们当前在哪个页面上。我无法“硬编码”这些链接,因为我需要在共享的局部视图中使用它,即每个页面上使用的 _Layout 中的 _topNavigation。
如果我需要澄清,请告诉我。我确信在本地化应用程序时使用“区域”并不是真正的方法,但我仍在努力自学 asp.net MVC。我阅读了许多关于本地化的教程和示例,但我无法让它们发挥作用或有意义。
我还应该补充一点,我已经知道如何使用 HTML.ActionLink 在区域之间来回切换。我已经成功地为西班牙语(es)区域中的任何视图以及默认站点中的任何视图创建了正确的 HTML.ActionLinks。所以这不是我的问题。
非常感谢任何帮助!谢谢!
【问题讨论】:
-
您提到您知道区域不是本地化的方法,但我想强调它们绝对是错误的使用方法。如果您想实现本地化,您应该将所有需要本地化的内容(大部分将显示给用户的文本字符串)存储在一些外部资源(如数据库)中,然后在适当的位置检索内容基于用户选择的语言。使用您当前的方法,您必须为您支持的每种语言维护一个相同的代码副本。
-
嗯,不仅仅是字符串会随着语言的变化而变化,还有不同的布局和导航。认为使用许多资源文件可能会更难维护,我们也不能回到应用程序并更改它以接受这种方式的内容。然后我认为实际上通过特定于文化的视图来做到这一点会更有意义,但我很难让它发挥作用(使用不同的视图引擎等)。所以,在给定的时间内,我只好创建一个区域。
-
另外,他们只会这样做一次 - 该网站只会被翻译成西班牙语。
-
也许它与这个特定问题无关,但另一种选择是定义处理 URL 的
/es/部分的特殊路由映射。
标签: asp.net-mvc controller toggle asp.net-mvc-areas html.actionlink