Haber bültenini güncellemeye çalışıyorum. Yayının, kayıt başlangıçta oluşturulduğunda doldurulan Oluşturuldu adlı bir tarih alanı vardır. Güncelleme sırasında bunu eklemiyorum, bu nedenle aşağıdaki yöntemi kullanırken, bu boştur ve bir hata verir.MVC'deki bir nesnenin yalnızca bazı alanlarını güncellemenin en iyi yolu nedir?
MVC 5 ve Varlık Çerçeve 6
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Title,Summary,Content")] Post post) {
if (ModelState.IsValid) {
db.Entry(post).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(post);
}
Bu yöntem çalışması yok kullanıyorum ama biraz aksak görünüyor.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Title,Summary,Content")] Post post) {
if (ModelState.IsValid) {
var newsPost = db.Posts.Find(post.Id);
if (newsPost == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); }
newsPost.Title = post.Title;
newsPost.Summary = post.Summary;
newsPost.Content = post.Content;
db.Entry(newsPost).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(post);
}
Bunu yapmanın en iyi yöntemi nedir?
Teşekkürler!
AutoMapper gibi bir şey kullanmanın bir yol olabileceğine inanıyorum. – Kamo
EF6 ile 'db.Entry (post) .State = EntityState.Modified;' db.Entry (post) .Property (x => x.Created) .IsModified = false; 'önce kullanabilmeniz gerekir. –
kaydetme ViewModel şablonuna bakıyorum (http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx). Bir görünüm modeli oluşturun, HttpGet yönteminize gönderin, HttpPost yöntemine geri gönderin, doğrulama modelinizi güncelleyin. Kamo'nun işaret ettiği gibi, Automapper bunun için harika. Ardından, güncellemek istemediğiniz alanlarda Html.HiddenFor kullanabilirsiniz. –