带有Nullable DateTime属性的ASP.NET MVC4模型绑定问题

时间:2013-10-01 11:34:09

标签: c# asp.net asp.net-mvc-4 model-binding

我遇到了模型绑定的问题,这种问题发生在控制器操作的上下文之外。我正在使用以下代码来处理绑定,并且它几乎在所有场景中都有效,但是,它似乎会落在任何类型为“DateTime?”的属性上。有没有人有任何想法?在这种情况下,TEntity是一个代表博客文章的POCO,因此有许多字段,字符串,长整数等,这些都是绑定正常。它只是无法绑定的可选日期时间(在此实例中称为“PublishStart”和“PublishEnd”)。从BindModel返回的结果始终具有空值。表单集合中的输入始终使用日期时间格式“dd / MM / yyyy”。

在调试模式中单步执行代码时,我尝试使用valueProvider.GetValue(“PublishStart”),它不会抛出任何错误并显示我对RawValue的期望,但我看不清楚从该结果中获取值以检查它是否已解析为OK。

我正在使用的代码如下。有没有人有任何想法?

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);

Global ASAX具有以下设置默认模型绑定器

System.Web.Mvc.ModelBinders.Binders.DefaultBinder = new DefaultModelBinder();

1 个答案:

答案 0 :(得分:2)

所以一点点挖掘就得到了答案。事实证明有人为DateTimes添加了一个自定义模型绑定器,导致它返回null。故事的道德,请注意对Binders.Add的调用。