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