相关疑难解决方法(0)

MVC DateTime绑定具有不正确的日期格式

Asp.net-MVC现在允许隐式绑定DateTime对象.我有一个行动

public ActionResult DoSomething(DateTime startDate) 
{ 
... 
}
Run Code Online (Sandbox Code Playgroud)

这成功地将字符串从ajax调用转换为DateTime.但是,我们使用日期格式dd/MM/yyyy; MVC正在转换为MM/dd/yyyy.例如,使用字符串'09/02/2009'提交对操作的调用会导致DateTime为'02/09/2009 00:00:00',或在我们的本地设置中为9月2日.

我不想为了日期格式而滚动我自己的模型绑定器.但是,如果MVC能够为我执行此操作,则无需更改操作以接受字符串然后使用DateTime.Parse.

有没有办法改变DateTime的默认模型绑定器中使用的日期格式?默认型号绑定器不应该使用您的本地化设置吗?

asp.net-mvc formatting datetime localization model-binders

128
推荐指数
7
解决办法
13万
查看次数

如何在MVC4 RC WebApi中注册自定义模型绑定器

我最近从MVC4 beta更新到了RC,并遇到了一个WebApi项目的小问题.我注意到的第一件事就是ServiceResolver被删除了.在删除之前,我使用它以下列方式注册自定义模型绑定提供程序:

IEnumerable<object> modelBinderProviderServices = GlobalConfiguration.Configuration.ServiceResolver.GetServices(typeof(ModelBinderProvider));
List<Object> services = new List<object>(modelBinderProviderServices) { new CustomDynamicObjectModelBinderProvider() };
GlobalConfiguration.Configuration.ServiceResolver.SetServices(typeof(ModelBinderProvider), services.ToArray());
Run Code Online (Sandbox Code Playgroud)

利用此模型绑定程序提供程序的操作具有以下签名:

[HttpPut]
public void Put(CustomDynamicObject model)
Run Code Online (Sandbox Code Playgroud)

我尝试用以下代码替换旧代码,但没有结果:

GlobalConfiguration.Configuration.Services.Add(typeof(ModelBinderProvider), new CustomDynamicObjectModelBinderProvider());
Run Code Online (Sandbox Code Playgroud)

当我尝试将数据PUT到给定的动作时,不调用模型提供者的GetBinder方法,并且模型参数设置为null.通过将Acion /方法的签名更改为以下内容,我能够使用ModelBinder属性使操作使用想要的模型绑定器

[HttpPut]
public void Put([ModelBinder(typeof(CustomDynamicObjectModelBinderProvider))] CustomDynamicObject model)
Run Code Online (Sandbox Code Playgroud)

虽然这有效但我真的不想在我的所有控制器/动作中使用这种语法.

我想我应该提一下我的模型绑定器提供程序继承自:

System.Web.Http.ModelBinding.ModelBinderProvider
Run Code Online (Sandbox Code Playgroud)

我这样说是因为我看到以下命名空间中有另一个ModelBinderProvider类:

Microsoft.Web.Mvc.ModelBinding
Run Code Online (Sandbox Code Playgroud)

回顾一下:如何在MVC4 RC WebApi中注册自定义模型绑定器?

c# asp.net-mvc-4 asp.net-web-api

2
推荐指数
1
解决办法
6953
查看次数