Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有Nullable DateTime属性的ASP.NET MVC4模型绑定问题_C#_Asp.net_Asp.net Mvc 4_Model Binding - Fatal编程技术网

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

C# 具有Nullable DateTime属性的ASP.NET MVC4模型绑定问题,c#,asp.net,asp.net-mvc-4,model-binding,C#,Asp.net,Asp.net Mvc 4,Model Binding,我遇到一个模型绑定问题,它发生在控制器操作的上下文之外。我正在使用下面的代码来处理绑定,它在几乎所有的场景中都能工作,但是,它似乎落在任何类型为“DateTime”的属性上。有人有什么想法吗?在本例中,TEntity是一个表示博客文章的POCO,因此有许多字段是字符串、long等,这些字段都可以绑定。绑定失败的只是可选的日期时间(在本例中称为“PublishStart”和“PublishEnd”)。从BindModel返回的结果始终具有空值。表单集合中的输入始终使用datetime的格式“dd/

我遇到一个模型绑定问题,它发生在控制器操作的上下文之外。我正在使用下面的代码来处理绑定,它在几乎所有的场景中都能工作,但是,它似乎落在任何类型为“DateTime”的属性上。有人有什么想法吗?在本例中,TEntity是一个表示博客文章的POCO,因此有许多字段是字符串、long等,这些字段都可以绑定。绑定失败的只是可选的日期时间(在本例中称为“PublishStart”和“PublishEnd”)。从BindModel返回的结果始终具有空值。表单集合中的输入始终使用datetime的格式“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();

因此,在这里进行一点挖掘就得出了答案。原来有人为DateTimes添加了一个自定义模型绑定器,导致它返回null。故事的寓意是,注意对Binders.Add的调用。

以前一直在使用从DefaultModelBinder继承的自定义ModelBinder,并将BindModel委托给base.BindModel用于除特定场景以外的所有场景,但已将其删除以进行调试,因此它只是使用DefaultModelBinder。