MVC 5 DateTime POST到控制器显示为1/1/0001

时间:2016-02-03 19:00:21

标签: c# asp.net-mvc

我在使用脚手架创建的视图编辑模型时遇到一些问题,并且当模型具有DateTime字段时,使用数据库第一模型创建控制器。创建新记录工作正常。当尝试编辑新创建的记录时,将在生成的编辑页面中引入正确的日期和时间。当我尝试将记录保存回数据库时,会发生此问题。控制器上的模型显示创建时调试显示DateTime字段为1/1/0001 12:00:00。我不确定是什么原因导致这个问题,因为我正在使用模型视图和控制器的标准生成代码。在调试时的autos窗口中,我在ValueProvider下看到Key也有正确的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; }
}

这是控制器上的方法

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

任何想法或建议都表示赞赏!

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

通常,如果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; }

答案 2 :(得分:0)

HTML5输入type =“ 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 并且如果您数据库中的日期时间不接受null,请在模型类上使用[Required]属性装饰该属性

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