ASP.NET(MVC)路由国际化
我正在寻找一个在ASP.NET MVC网站上国际化/本地化路由的解决方案.我偶然发现了Maarten Balliauw的
Translating routes (ASP.NET MVC and Webforms)号博客.他提出了一个非常好的解决方案,效果很好 – 直到视图中有一个Html.RenderAction(“…”).
基本上他引入了一个继承自System.Web.Routing.Route的TranslatedRoute,而不是使用带有翻译的Dictionary进行翻译. 知道为什么在调用Html.RenderAction(“…”)时这种行为会有所不同?此外,似乎只发生错误,如果应该呈现的操作是在同一个控制器中. 这是确切的错误:
更新: 这是我的路线配置(取自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"),"Contact","Contact"),new RouteValueTranslation(cultureDE,"Kontakt"),new RouteValueTranslation(cultureFR,"Demarrer"),"Infos"),"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",id = "" } // Parameter defaults ); 解决方法
这取决于您的路线配置.你能分享一下吗?
编辑:似乎RenderAction方法在路由上使用“GetVirtualPath”来确定MvcHandler的URL.但是,那个不会回调到“GetRouteData”方法. 有一种检测方法:routeData.DataTokens [“ParentActionViewContext”] 简而言之:我担心当前在System.Web.Mvc中实现ChildActionExtensions.ActionHelper是不可能的…… 我有一个(脏的,自我不尊重的)解决方法(你也可以在自定义的RenderAction()方法中包装): <% RouteData.DataTokens.Add("GoingToRenderChildAction",true); %> <% Html.RenderAction("Contact","Home"); %> <% RouteData.DataTokens["GoingToRenderChildAction"] = false; %> 剃刀语法: @{ ViewContext.RequestContext.RouteData.DataTokens.Add("GoingToRenderChildAction",true); } @Html.Action("Action","Controller" ) @{ ViewContext.RequestContext.RouteData.DataTokens["GoingToRenderChildAction"]=false; } 在TranslatedRoute.cs GetVirtualPath中,添加以下内容作为第一个语句: if(requestContext.RouteData.DataTokens.ContainsKey("GoingToRenderChildAction") && (bool)requestContext.RouteData.DataTokens["GoingToRenderChildAction"] == true) { return base.GetVirtualPath(requestContext,values); } 这可行,但可能有不良副作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 无法识别的配置部分log4net. web.config网站
- 使用Reporting Services(SSRS)作为ASP.NET Core站点中的引用
- asp.net-mvc – 实体创建抛出“没有为此对象定义的无参数构
- asp.net TreeView与XML三步生成列表树
- asp.net-mvc – 在Visual Studio中使用TypeScript在lib.d.t
- 删除时jQGrid主键问题
- asp.net-mvc – 如何使用Autotyper和Betty方法将DataAnnota
- asp.net Mvc4 使用ajax结合分页插件实现无刷新分页
- asp.net-mvc – SignalR无法从外部程序集中找到集线器
- ML.NET技术研究系列-1入门篇
- asp.net – .NET Web API 2 OWIN承载令牌认证
- ASP.NET Core 新建项目 - macOS 环境 - ASP.NET
- asp.net-mvc – 域模型中的ASP.NET MVC业务逻辑与
- asp.net – @Model不支持在Razor视图VB?
- Asp.net会话交叉/混合
- 如何模拟我的ASP.NET应用程序的HTTP 500错误?
- asp.net – 文本框在点击输入时关注按钮?
- asp.net-mvc – MVC包含路径无效错误
- asp.net – AcquireRequestState的长时间延迟
- asp.net-mvc – MVC 4 Ajax.beginform提交 – 导