asp.net-mvc – 为多语言ASP.NET MVC Web应用程序设置CurrentCul
发布时间:2020-12-15 19:18:04 所属栏目:asp.Net 来源:网络整理
导读:对于多语言ASP.NET MVC 3 Web应用程序,我在控制器工厂确定Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture如下: public class MyControllerFactory : DefaultControllerFactory { protected override IController GetControl
对于多语言ASP.NET MVC 3 Web应用程序,我在控制器工厂确定Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture如下:
public class MyControllerFactory : DefaultControllerFactory { protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext,Type controllerType) { //Get the {language} parameter in the RouteData string UILanguage; if (requestContext.RouteData.Values["language"] == null) UILanguage = "tr"; else UILanguage = requestContext.RouteData.Values["language"].ToString(); //Get the culture info of the language code CultureInfo culture = CultureInfo.CreateSpecificCulture(UILanguage); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; return base.GetControllerInstance(requestContext,controllerType); } }
我在Global.asax文件中注册这样: ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory()); 这是工作很好,但我不知道这是否是最好的做法和最好的地方做这种类型的行动。 我没有挖掘ControllerFactory的主要作用,我无法与ActionFilterAttribute比较。 你认为做这种类型的行动的最好的地方是什么? 解决方法
我为此使用了一个全局ActionFilter,但最近我意识到,在OnActionExecuting方法中设置当前文化在某些情况下太晚了。例如,当POST请求后的模型到达控制器时,ASP.NET MVC为模型创建元数据。它发生在任何动作被执行之前。因此,DisplayName属性值和其他数据注释东西在这一点使用默认文化处理。
最后,我将设置当前文化移动到自定义IControllerActivator实现,它的工作方式像一个魅力。我想从请求生命周期的角度来看,在自定义控制器工厂中托管这个逻辑几乎是一样的,就像你今天一样。它比使用全局ActionFilter更可靠。 CultureAwareControllerActivator.cs: public class CultureAwareControllerActivator: IControllerActivator { public IController Create(RequestContext requestContext,Type controllerType) { //Get the {language} parameter in the RouteData string language = requestContext.RouteData.Values["language"] == null ? "tr" : requestContext.RouteData.Values["language"].ToString(); //Get the culture info of the language code CultureInfo culture = CultureInfo.GetCultureInfo(language); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; return DependencyResolver.Current.GetService(controllerType) as IController; } } Global.asax.cs: public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { ... ControllerBuilder.Current.SetControllerFactory(new DefaultControllerFactory(new CultureAwareControllerActivator())); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 动态创建的DropDownList在Postback上丢失了List
- Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器
- asp.net – 504服务器上的错误
- asp.net – 无法为网站禁用SSL
- asp.net – HTML5编辑器从微软词语粘贴时丢失格式
- asp.net-mvc-3 – 实体框架4.1代码优先,需要延迟加载引用在
- asp.net-mvc – 绑定排除Asp.net MVC不适用于LINQ实体
- 浅谈ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法
- 如何阻止ASP.NET Menu控件生成内联html样式元素
- asp.net-core – db ASP.NET Core中的临时保存密码
推荐文章
站长推荐
- asp.net – 如何获取当前页面的HTML?
- asp.net – 使用Team City快照依赖项时,您使用快
- asp.net – 在调用异步方法时不使用等待来防止死
- asp.net – 如何将ContextKeys属性用于AjaxFileU
- asp.net-mvc – 从传递给局部视图的嵌套复杂对象
- asp.net – 如何获得Url.Action使用正确的端口号
- asp.net-mvc – Asp.net MVC 3 RC – Razor Vali
- ASP.NET主题样式表渲染
- .NET Core的文件系统[1]:读取并监控文件的变化
- asp.net-mvc-4 – OAuth2和DotNetOpenAuth – 实
热点阅读