- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
原来MVC的DefaultModelBinder
使用不同的文化来解析 POST 和 GET 请求的值(例如 double
、 DateTime
等)。
Here是更多信息。
我看到这是由 Culture
控制的。 ValueProviderResult
的属性(property)对象,从 IValueProvider.GetValue()
返回.
我的问题是:我如何在全局范围内确保此值始终为 CultureInfo.InvariantCulture。
我知道我可以实现自定义值提供程序并这样做。
我知道我可以实现自定义模型绑定(bind)器并这样做。
我知道我可以在线程中设置文化,但不幸的是,这不是我的选择。
我正在寻找的是一种设置它的方法,以便即使默认模型绑定(bind)器和现有的值提供者也能够以文化不变的方式进行解析,而不管线程文化设置为什么。
最佳答案
据我所知,没有办法符合您的标准。您将不得不做一件您知道可以做的事情(我想说最合适的方法是自定义值(value)提供者)。
原因:所有默认的 ValueProvider 都被硬编码为使用 CultureInfo.InvariantCulture
或 CultureInfo.CurrentCulture
.
这里,具体来说,是FormValueProvider
的方式可以:
internal FormValueProvider(
ControllerContext controllerContext,
IUnvalidatedRequestValues unvalidatedValues
)
: base(
controllerContext.HttpContext.Request.Form,
unvalidatedValues.Form,
CultureInfo.CurrentCulture // <--- Grrr, argh
)
{
}
CurrentCulture
IValueProviders
FormValueProvider
并不是一项艰巨的任务,因为,如上所示,它只是调用其基类的(
NameValueCollectionValueProvider
)构造函数——它将所需的文化作为参数。
NameValueCollection
容易获得的:
Request.Forms
和
Forms
Validation.Unvalidated(Request)
的属性(property)(静态方法)。并将第三个参数设置为您想要的文化。
FormValueProviderFactory
更直接。
JsonValueProvider
涉及更多 - 基本上你必须复制
JsonValueProviderFactory
的来源到一个新类并修改它 - 因为虽然它允许覆盖
GetValueProvider()
, 该方法主要包括调用其他
private static
方法。
ValueProviderFactories.Factories
是不够的。 , 因为这样它是在
FormValueProviderFactory
之后添加的.相反,我不得不替换
FormValueProviderFactory
与定制的。
关于asp.net-mvc-3 - 如何将模型绑定(bind)中使用的所有 ValueProviderResult 的文化设置为给定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17708344/
原来MVC的DefaultModelBinder使用不同的文化来解析 POST 和 GET 请求的值(例如 double 、 DateTime 等)。 Here是更多信息。 我看到这是由 Cultur
我是一名优秀的程序员,十分优秀!