ASP.NET MVC4 模型绑定问题与可为空的日期时间属性

本文关键字:日期 属性 时间 MVC4 NET 模型 绑定 问题 ASP | 更新日期: 2023-09-27 18:33:30

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

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

我使用的代码如下。 有人有什么想法吗?

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

ASP.NET MVC4 模型绑定问题与可为空的日期时间属性

所以稍微挖掘一下,这里得出了答案。 事实证明,有人为 DateTimes 添加了一个自定义模型绑定程序,导致它返回 null。 故事的寓意,注意给Binders.Add的电话。