Суть в том, что //do something
деталь всегда отличается от действия к действию.Итак, давайте попробуем сократить весь код, кроме этого.Вы можете использовать базовый контроллер для него
public class BaseController : Controller
{
[NonAction]
protected virtual ActionResult HandlePost<T>(T model, Action<T> processValidModel)
{
if (ModelState.IsValid)
{
processValidModel(model);
return RedirectToAction("Main");
}
else
{
return View(model);
}
}
}
И в производном контроллере
public class DerivedController : BaseController
{
[HttpPost]
public ActionResult Create(Person person)
{
return HandlePost(person, p => _repository.Save(p));
}
}