我在使用脚手架创建的视图编辑模型时遇到一些问题,并且当模型具有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);
}
任何想法或建议都表示赞赏!
答案 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; }