1

我遇到了在控制器操作上下文之外发生的模型绑定问题。我正在使用以下代码来处理绑定,它几乎适用于所有场景,但是,它似乎落在任何类型为“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);

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

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

1 回答 1

2

所以一点点挖掘在这里得到了答案。原来有人为 DateTimes 添加了一个自定义模型绑定器,导致它返回 null。故事的寓意,留意对 Binders.Add 的调用。

于 2013-10-04T09:01:18.820 回答