C# MVC 5日期时间过帐到控制器,显示为1/1/0001

C# MVC 5日期时间过帐到控制器,显示为1/1/0001,c#,asp.net-mvc,C#,Asp.net Mvc,当模型有DateTime字段时,我在从scaffold created视图编辑模型和使用database first模型创建的控制器时遇到一些问题。创建一个新记录很好。尝试编辑时,新创建的记录将在生成的编辑页面中输入正确的日期和时间。当我试图将记录保存回数据库时,问题就出现了。控制器上的模型显示调试时创建的,日期时间字段显示为1/1/0001 12:00:00。我不确定是什么导致了这个问题,因为我正在为模型视图和控制器使用标准生成的代码。在调试时的autos窗口中,我在ValueProvider

当模型有DateTime字段时,我在从scaffold created视图编辑模型和使用database first模型创建的控制器时遇到一些问题。创建一个新记录很好。尝试编辑时,新创建的记录将在生成的编辑页面中输入正确的日期和时间。当我试图将记录保存回数据库时,问题就出现了。控制器上的模型显示调试时创建的,日期时间字段显示为1/1/0001 12:00:00。我不确定是什么导致了这个问题,因为我正在为模型视图和控制器使用标准生成的代码。在调试时的autos窗口中,我在ValueProvider下看到键也具有正确的ValidatedResult

下面是从实体框架生成的模型代码

    public partial class Feature
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Feature()
    {
        this.FeatureActions = new HashSet<FeatureAction>();
    }

    public System.Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool InActive { get; set; }
    public bool System { get; set; }
    public byte[] Version { get; set; }
    public System.DateTime CreatedDate { get; set; }
    public System.DateTime UpdatedDate { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<FeatureAction> FeatureActions { get; set; }
}

任何想法或建议都将不胜感激

如果您使用第三方插件,如datetimepicker,则必须查看此插件的datetime格式

如果我理解了这个问题,这些插件有一个默认的格式比,无论收到的格式是否不兼容,它都放默认的


希望这能给你一些帮助。:)

通常,如果DateTime值显示为
1/1/0001 12:00:00
,则绑定错误(可能是名称拼写错误)。。但是根据属性的命名方式,用户似乎无法编辑这些值,这就是我在控制器中看到的
feature.updateDate=DateTime.Now

在您的模型中,请尝试:

[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy, hh.mm tt}", ApplyFormatInEditMode = true)]
public System.DateTime CreatedDate { get; set; }

[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy, hh.mm tt}", ApplyFormatInEditMode = true)]
public System.DateTime UpdatedDate { get; set; }
HTML5 input type=“date”将日期显示为yyyy-MM-dd。因此,首先您需要通过以下方式更改日期格式:

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
其次,不接受null的DateTime将采用初始值DateTime.MinValue,返回日期={1/1/0001 12:00:00 AM} 因此,通过
public datetime使您的datetime接受null?CreatedDate{get;set;}
如果数据库中的datetime不接受null,则在模型类上使用
[必需]
属性装饰该属性

[Required]
[Display(Name = "Created Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? CreatedDate { get; set; }

在网络请求中传递的实际日期值是多少?我传递的实际日期值如下“7/21/2015 10:32:21 am”它是从数据库中提取的值,并显示在Razor中的EditorFor字段中。我也尝试过修改该值,它总是以1/1/0001 12:00:00显示在控制器模型上。您是否使用了第三方插件,如datetimepicker?我没有使用任何第三方插件,每当我遇到这个问题时,它只是从scaffolding生成的代码,这通常是因为原始网络请求中看到的值为null,或者是.NET无法解析为日期的格式字符串。您还可以在通过EF更新运行该值之前跟踪该值,甚至可以查看生成的SQL查询。此解决方案没有帮助—这是一个核心问题。不是第三方的
[Required]
[Display(Name = "Created Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? CreatedDate { get; set; }