私は次のクラスを持っています
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 が編集可能なフィールドとして存在しません。
助けていただければ幸いです。
ありがとうございました。