我正在寻找一种在 ASP.NET MVC 网站上国际化/本地化路由的解决方案。我偶然发现了这篇博客文章翻译路由(ASP.NET MVC 和 Webforms) http://blog.maartenballiauw.be/post/2010/01/26/Translating-routes-(ASPNET-MVC-and-Webforms).aspx作者:马滕·巴利奥 (Maarten Balliauw)他提出了一个非常好的解决方案,效果很好 - 直到有一个Html.RenderAction("...")
视图中。
基本上他介绍了一个TranslatedRoute
继承自System.Web.Routing.Route
,这比使用带有动态翻译的词典进行翻译要好。
知道为什么调用时会有不同的行为吗Html.RenderAction("...")
?而且,似乎只有当应该呈现的操作位于同一控制器中时才会发生错误。
这是确切的错误:
“路径‘/MyTranslatedControllerName’的控制器未找到或未实现 IController。”
Update:
这是我的路由配置(取自 Maarten 的示例项目,添加了 Contact 的路由,这是要渲染的部分):
public static void RegisterRoutes(RouteCollection routes)
{
CultureInfo cultureEN = CultureInfo.GetCultureInfo("en-US");
CultureInfo cultureDE = CultureInfo.GetCultureInfo("de-DE");
CultureInfo cultureFR = CultureInfo.GetCultureInfo("fr-FR");
DictionaryRouteValueTranslationProvider translationProvider = new DictionaryRouteValueTranslationProvider(
new List<RouteValueTranslation> {
new RouteValueTranslation(cultureEN, "Home", "Home"),
new RouteValueTranslation(cultureEN, "About", "About"),
new RouteValueTranslation(cultureEN, "Contact", "Contact"),
new RouteValueTranslation(cultureDE, "Home", "Home"),
new RouteValueTranslation(cultureDE, "About", "About"),
new RouteValueTranslation(cultureDE, "Contact", "Kontakt"),
new RouteValueTranslation(cultureFR, "Home", "Demarrer"),
new RouteValueTranslation(cultureFR, "About", "Infos"),
new RouteValueTranslation(cultureFR, "Contact", "Contact")
}
);
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapTranslatedRoute(
"TranslatedRoute",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" },
new { controller = translationProvider, action = translationProvider },
true
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);