我有以下课程
public class News
{
[Key]
public int NewsId { get; set; }
[Required(ErrorMessage = "The article title is required.")]
[MaxLength(50)]
public string Title { get; set; }
[Required(ErrorMessage = "The article text is required.")]
[UIHint("MultilineText")]
[MaxLength(500)]
public string Article { get; set; }
[Display(Name = "Days to Expire")]
public int DaysToExpire { get; set; }
public DateTime ArticleDate { get; set; }
}
以及生成的 CRUD 视图页面。这是控制器中用于编辑的代码:
[HttpPost]
public ActionResult Edit(News news)
{
if (ModelState.IsValid)
{
db.Entry(news).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(news);
}
当我尝试编辑记录时,我收到以下错误:
将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。
我将方法更改为
[HttpPost]
public ActionResult Edit(News news)
{
if (ModelState.IsValid)
{
var prevDate = db.NewsArticles.First(a => a.NewsId == news.NewsId).ArticleDate;
news.ArticleDate = prevDate;
db.Entry(news).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(news);
}
尝试将 ArticleDate 属性设置为它已经存在的值,但收到以下错误
该语句已终止。
ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
我发现这个问题是相同的错误(有趣的是,他们也在处理文章)并且它提到该错误是由于使用了 ApplyPropertyChanges。
要添加,在 Edit.cshtml 中,ArticleDate 不作为可编辑字段存在。
帮助表示赞赏。
谢谢你。