我遇到了模型绑定的问题,这种问题发生在控制器操作的上下文之外。我正在使用以下代码来处理绑定,并且它几乎在所有场景中都有效,但是,它似乎会落在任何类型为“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();
答案 0 :(得分:2)
所以一点点挖掘就得到了答案。事实证明有人为DateTimes添加了一个自定义模型绑定器,导致它返回null。故事的道德,请注意对Binders.Add的调用。