Я создаю два перегруженных действия в контроллере, одно для рендеринга формы ввода с использованием HTTP GET, а другое для обработки сообщения формы с помощью HTTP POST. Примерно так:
public ViewResult Foo()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ViewResult Foo( FormCollection form )
{
// process input
if (inputOK)
return RedirectToAction("Index");
return View();
}
Преимущество такого способа состоит в том, что в случае ошибки представление повторно отображается с любыми сообщениями об ошибках и проверками. Если это успешно, есть перенаправление на другое действие, которое позволяет избежать дублирования предупреждения о публикации в браузерах, если пользователь обновляет страницу - см. Опубликовать / Перенаправить / Получить в Википедии и эту запись в блоге Стивена Уолтера .
Существуют альтернативы принятию FormCollection, например, список простых параметров или привязка к объекту. Смотрите эту статью ScottGu .