C# 具有Nullable DateTime属性的ASP.NET MVC4模型绑定问题
我遇到一个模型绑定问题,它发生在控制器操作的上下文之外。我正在使用下面的代码来处理绑定,它在几乎所有的场景中都能工作,但是,它似乎落在任何类型为“DateTime”的属性上。有人有什么想法吗?在本例中,TEntity是一个表示博客文章的POCO,因此有许多字段是字符串、long等,这些字段都可以绑定。绑定失败的只是可选的日期时间(在本例中称为“PublishStart”和“PublishEnd”)。从BindModel返回的结果始终具有空值。表单集合中的输入始终使用datetime的格式“dd/MM/yyyy” 在调试模式下单步执行代码时,我尝试使用valueProvider.GetValue(“PublishStart”),它不会抛出任何错误,并显示我对RawValue的期望值,但我不知道如何从该结果中获取值以检查其解析是否正确 下面是我正在使用的代码。有人有什么想法吗C# 具有Nullable DateTime属性的ASP.NET MVC4模型绑定问题,c#,asp.net,asp.net-mvc-4,model-binding,C#,Asp.net,Asp.net Mvc 4,Model Binding,我遇到一个模型绑定问题,它发生在控制器操作的上下文之外。我正在使用下面的代码来处理绑定,它在几乎所有的场景中都能工作,但是,它似乎落在任何类型为“DateTime”的属性上。有人有什么想法吗?在本例中,TEntity是一个表示博客文章的POCO,因此有许多字段是字符串、long等,这些字段都可以绑定。绑定失败的只是可选的日期时间(在本例中称为“PublishStart”和“PublishEnd”)。从BindModel返回的结果始终具有空值。表单集合中的输入始终使用datetime的格式“dd/
var valueProvider = new NameValueCollectionValueProvider(formCollection, null);
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null,
typeof(TEntity));
var bindingContext = new ModelBindingContext
{
ModelName = "",
ValueProvider = valueProvider,
ModelMetadata = metadata
};
var controllerContext = new ControllerContext();
var binder = new DefaultModelBinder();
// act
TEntity actual = (TEntity)binder.BindModel(controllerContext, bindingContext);
全局ASAX具有以下设置默认模型绑定器的功能
System.Web.Mvc.ModelBinders.Binders.DefaultBinder = new DefaultModelBinder();
因此,在这里进行一点挖掘就得出了答案。原来有人为DateTimes添加了一个自定义模型绑定器,导致它返回null。故事的寓意是,注意对Binders.Add的调用。以前一直在使用从DefaultModelBinder继承的自定义ModelBinder,并将BindModel委托给base.BindModel用于除特定场景以外的所有场景,但已将其删除以进行调试,因此它只是使用DefaultModelBinder。