MVC 5 日期时间开机自检到控制器,显示为 1/1/0001



当模型具有 DateTime 字段时,从使用数据库第一个模型创建的脚手架创建的视图和控制器编辑模型时遇到了一些问题。 创建新记录工作正常。尝试编辑新创建的记录时,将在生成的编辑页面中引入正确的日期和时间。 当我尝试将记录保存回数据库时出现问题。 控制器上的模型显示 在调试时创建的 日期时间 字段显示为 1/1/0001 12:00:00。 我不确定是什么导致了这个问题,因为我正在为模型视图和控制器使用标准生成的代码。 在调试时的自动窗口中,我在 ValueProvider 下看到密钥也具有正确的验证结果。

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

    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; }
}

这是控制器上的方法

  [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "Id,Name,Description,InActive,System,Version,CreatedDate,UpdatedDate")] Feature feature)
    {
        if (ModelState.IsValid)
        {
            feature.UpdatedDate = DateTime.Now;
            db.Entry(feature).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(feature);
    }

任何想法或建议不胜感激!

如果您使用的是第三方插件,例如日期时间选择器,则必须查看此插件的日期时间格式。

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

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

通常,

如果 DateTime 值显示为 1/1/0001 12:00:00 则绑定是错误的(可能是拼写错误的名称).. 但是根据属性的命名方式,看起来用户不应该能够编辑这些值,这就是我在控制器中看到的feature.UpdatedDate = 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输入类型="date"将日期显示为yyyy-MM-dd。 因此,首先您需要通过以下方式更改日期格式:

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

其次,不接受 null 的 DateTime 将采用初始值 DateTime.MinValue,返回 Date = {1/1/0001 12:00:00 AM}因此,通过public DateTime? CreatedDate { get; set; }使您的日期时间接受空如果数据库中的日期时间不接受 null,则在模型类上用 [Required] 属性修饰该属性

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

最新更新