如何解决控制器中edit方法的传输参数中的DateTime始终为01.01.0001 00:00:00 asp.net mvc5
我在编辑方法“问题”中的传输参数有问题。
在问题中,CreatedDate 和 UpdatedDate 始终为 {01.01.0001 00:00:00}。
参数 Id、Title 和 Description 始终正确。
我的控制器:
public ActionResult Edit([Bind(Include = "Id,Title,Description")] Issue issue)
{
if (ModelState.IsValid)
{
db.Entry(issue).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(issue);
}
我的模型:
public class Issue : BaseEntity
{
public int Id { get; set; }
[required(ErrorMessage = "required")]
public string Title { get; set; }
[AllowHtml]
[required(ErrorMessage = "required")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
}
public class BaseEntity
{
public DateTime CreatedDate { get; set; }
public DateTime UpdatedDate { get; set; }
}
不幸的是,我无法从“问题”参数的来源进行调试。
Edit 方法中的传输参数“Issue issue”从何而来,为什么所有 DateTimes 总是 {01.01.0001 00:00:00}?
当我第一次创建问题实体时,我在 SaveChanges() 方法中添加了 DateTimme,并在我的 DBContext 中进行了以下修改:
public override int SaveChanges()
{
var entries = ChangeTracker
.Entries()
.Where(e => e.Entity is BaseEntity && (
e.State == EntityState.Added
|| e.State == EntityState.Modified));
foreach (var entityEntry in entries)
{
((BaseEntity)entityEntry.Entity).UpdatedDate = DateTime.UtcNow;
if (entityEntry.State == EntityState.Added)
{
((BaseEntity)entityEntry.Entity).CreatedDate = DateTime.UtcNow;
}
}
return base.SaveChanges();
}
并且 SaveChanges() 工作没有问题。当我第一次创建问题实体时,DateTime 具有正确的值,我也可以在详细信息视图中看到它。
解决方法
将您的编辑代码更改为此
var exist = d.Set<Issue>().FindAsync(issue.Id);
if (exist == null)
{
//ErrorMessage = "Can't find item to update";
}
else{
db.Entry(exist).CurrentValues.SetValues(issue);
var result = await db.SaveChanges(); // result should be > 0
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。