Я видел множество примеров действий создания в статьях, книгах и примерах. Кажется, есть два распространенных стиля.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
try
{
var contact = Contact.Create();
UpdateModel<Contact>(contact);
contact.Save();
return RedirectToAction("Index");
}
catch (InvalidOperationException ex)
{
return View();
}
}
И ...
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")]Contact contact)
{
try
{
contact.Save(); // ... assumes model does validation
return RedirectToAction("Index");
}
catch (Exception ex)
{
// ... have to handle model exceptions and populate ModelState errors
// ... either here or in the model's validation
return View();
}
}
Я пробовал оба метода, и у обоих есть свои плюсы и минусы, ИМО.
Например, при использовании версии FormCollection мне приходится иметь дело с «Id» вручную в моем связывателе модели, так как здесь Bind / Exclude не работает. С типизированной версией метода я вообще не могу использовать связыватель модели. Мне нравится использовать связыватель модели, поскольку он позволяет мне заполнять ошибки ModelState, не имея сведений о ModelState в коде проверки моей модели.
Есть идеи?
Обновление:
Я ответил на свой собственный вопрос, но я не буду отмечать его как ответивший в течение нескольких дней, если у кого-то будет лучший ответ.