Я немного новичок в MVC 3, так что это может быть что-то простое. У меня есть база данных Compact SQL 4. Существует объект Post, который имеет поля Contents (строка), Subject (строка), When (DateTime) и Reposted (DateTime nullable). Во время метода Create Post я вручную устанавливаю свойство Date в DateTime.Now, и оно прекрасно работает.
Однако в моем редактируемом представлении я НЕ хочу показывать это поле или, по крайней мере, не позволять ему быть редактируемым полем. Когда я НЕ помещаю его как редактируемое поле в окне редактирования, и они меняются, например, содержимое, а затем нажимают кнопку Сохранить, я получаю сообщение:
Произошло переполнение при преобразовании в datetime.
Во время редактирования обратной передачи я устанавливаю для поля Reposted значение DateTime.Now, поэтому оно должно быть полем Когда. Когда я отлаживаю эту обратную передачу, я вижу, что объект «Post» заполняется только значениями полей, которые я отображаю на экране. Поэтому я решил просто извлечь поле «Когда» с запросом LINQ непосредственно из данных, но когда я попадаю в SaveChanges, происходит сбой и он говорит следующее:
Объект с таким же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом
Так как я могу обновить объект и позволить пользователю изменять только несколько соответствующих полей? Похоже, объект Post не получает ВСЕ существующие значения, так как они не отображаются на экране. Как я могу полностью заполнить этот объект?
Редактировать: вот метод Post.
[HttpPost]
public ActionResult Edit(Post post) {
if (ModelState.IsValid) {
db.Posts.Attach(post);
int Successes = 0;
int Failures = 0;
this.SendEMail(post, out Successes, out Failures);
post.Successes = Successes;
post.Failures = Failures;
post.Reposted = DateTime.Now;
db.ObjectStateManager.ChangeObjectState(post, EntityState.Modified);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(post);
}