asp.net-mvc-3 – 如何将模型绑定中使用的所有ValueProviderResu
事实证明,MVC的DefaultModelBinder使用不同的文化来解析POST与GET请求的值(例如double,DateTime等).
Here是更多信息. 我看到这是由ValueProviderResult对象的Culture属性控制的,它们是从IValueProvider.GetValue()返回的. 我的问题是:如何全局确保此值始终为CultureInfo.InvariantCulture. 我知道我可以实现自定义值提供程序并以这种方式执行. 我知道我可以实现自定义模型绑定器并以这种方式执行. 我知道我可以在线程中设置文化,但不幸的是,这不是我的选择. 我正在寻找的是一种设置它的方法,以便即使是默认的模型绑定器和现有的值提供者也能够以文化不变的方式解析,而不管线程文化的设置是什么. 解决方法
据我所知,没有办法符合你的标准.你将不得不做你知道可以做的事情之一(我说最合适的方式是自定义价值提供者).
原因:所有默认的ValueProviders都是硬编码的,可以使用CultureInfo.InvariantCulture或CultureInfo.CurrentCulture. 具体来说,就是FormValueProvider的做法: internal FormValueProvider( ControllerContext controllerContext,IUnvalidatedRequestValues unvalidatedValues ) : base( controllerContext.HttpContext.Request.Form,unvalidatedValues.Form,CultureInfo.CurrentCulture // <--- Grrr,argh ) { } 不从其他任何地方检索文化(即,上面的论证不是默认使用,而是作为一种文化使用). 不同的IValueProviders的文化 作为参考,这些是每个默认IValueProviders的文化: > ChildActionValueProvider:InvariantCulture 替换CurrentCulture IValueProviders 替换FormValueProvider并不是一项艰巨的任务,因为如上所述,它只是调用它的基类'(NameValueCollectionValueProvider)构造函数 – 它将所需的文化作为参数. FormValueProvider的原始实现在表面上看起来比实际更难,引用了内部类和接口.但是为了取代提供者而不需要它们 – 它们仅用于单元测试. 您只需要调用基本构造函数(如上所述),传递两个易于获取的NameValueCollections:Request.Forms和Validation.Unvalidated(Request)的Forms属性(静态方法).并将第三个参数设置为您想要的文化. FormValueProviderFactory更加简单明了. JsonValueProvider有点复杂 – 基本上你必须将JsonValueProviderFactory的源代码复制到一个新类并修改它 – 因为虽然它允许重写GetValueProvider(),但该方法主要包括对其他私有静态方法的调用. 编辑(Petar Ivanov):这对我有用.为了使其工作,仅将自定义工厂添加到ValueProviderFactories.Factories是不够的,因为这是在FormValueProviderFactory之后添加的.相反,我不得不用自定义的FormValueProviderFactory替换它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 三步快速解决dll冲突问题
- asp.net-mvc – Asp.net Mvc 2.0 RC设置线程CurrentCulture
- asp.net – VS 2010 Web.config转换进行调试
- asp.net-mvc – 在ASP.NET MVC应用程序中进行分页时,在Tele
- asp.net-mvc – 空MVC5项目中的附加脚本
- JObject对象如何获取深度属性值&不判断key是否存在获取
- asp.net – Webservices可以作为单身人士引起不同用户的问题
- asp.net – MVC 4数据注释“显示”属性
- 如何将组名应用于asp.net中的HTML单选按钮?
- 文件上传 – 是否可以在上传文件的asp.net webapi中进行模型
- asp.net-mvc – 使用cookie在ASP MVC中存储会话
- asp.net – asp:ContentPlaceHolder和代码块问题
- 您是否可以覆盖Date.Now或Date.Today以在ASP.NET
- asp.net-mvc-3 – MVC3 – 如何将新创建的子对象
- ASP.NET API(MVC) 对APP接口(Json格式)接收数据与
- 如何测量Live ASP.NET MVC Web应用程序的内存使用
- asp.net-mvc – 从传递给局部视图的嵌套复杂对象
- asp.net – Orchard – 从主题布局中获取内容的标
- asp.net-mvc – ASP.NET MVC – 能够处理数组的自
- asp.net – 如何更改F#Canopy UI测试脚本中的下拉