微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

控制器中edit方法的传输参数中的DateTime始终为01.01.0001 00:00:00 asp.net mvc5

如何解决控制器中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 举报,一经查实,本站将立刻删除。