Asp.net mvc 3 如何将模型绑定中使用的所有ValueProviderResult的区域性设置为给定值?

Asp.net mvc 3 如何将模型绑定中使用的所有ValueProviderResult的区域性设置为给定值?,asp.net-mvc-3,Asp.net Mvc 3,事实证明,MVC的DefaultModelBinder使用不同的区域性来解析POST和GET请求的值(例如double,DateTime,等等)。 这是更多的信息 我发现这是由ValueProviderResult对象的Culture属性控制的,这些对象是从IValueProvider.GetValue()返回的 我的问题是:如何全局确保此值始终为CultureInfo.InvariantCulture 我知道我可以实现自定义值提供程序并以这种方式实现 我知道我可以实现自定义模型绑定器,并且可以

事实证明,MVC的
DefaultModelBinder
使用不同的区域性来解析POST和GET请求的值(例如
double
DateTime
,等等)。 这是更多的信息

我发现这是由
ValueProviderResult
对象的
Culture
属性控制的,这些对象是从
IValueProvider.GetValue()
返回的

我的问题是:如何全局确保此值始终为CultureInfo.InvariantCulture

我知道我可以实现自定义值提供程序并以这种方式实现

我知道我可以实现自定义模型绑定器,并且可以这样做

我知道我可以在线程中设置文化,但不幸的是,在我的情况下,这不是一个选项


我要寻找的是一种设置它的方法,这样即使是默认的模型绑定器和现有的值提供程序也能够以区域性不变的方式进行解析,而不管线程区域性设置为什么。

据我所知,没有任何方法能够符合您的条件。你必须做一件你知道你能做的事情(我认为最合适的方法是自定义值提供者)

原因:所有默认值提供程序都硬编码为使用
CultureInfo.InvariantCulture
CultureInfo.CurrentCulture

具体来说,这里是
FormValueProvider
的实现方式:

internal FormValueProvider(
            ControllerContext controllerContext,
            IUnvalidatedRequestValues unvalidatedValues
         )
         : base(
              controllerContext.HttpContext.Request.Form, 
              unvalidatedValues.Form,
              CultureInfo.CurrentCulture // <--- Grrr, argh
         ) 
{
}
内部FormValueProvider(
ControllerContext ControllerContext,
IUnvalidatedRequestValues未验证的值
)
:基本(
controllerContext.HttpContext.Request.Form,
未验证的值。形式,

CultureInfo.CurrentCulture//谢谢您的回复。我想我不确定哪些默认提供程序使用CurrentCulture(因此我需要扩展),所以我在寻找一个更通用的解决方案。添加了列表。我删除了
会话
临时数据
——它们是MVC未来的一部分,因此默认情况下不使用它们,
Cookie
服务器变量
。所有这些都使用
不变量文化