我正在为不同的Models
编写此Action代码(在同一个控制器中)超过10次。有什么办法可以减少这个代码,或者我怎样才能创建一个通用的动作。
[HttpPost]
public ActionResult SavePerson(Person p)
{
if (ModelState.IsValid)
{
//do something
return Redirect("/Main");
}
else
{
return View();
}
}
[HttpPost]
public ActionResult SaveCategory(Category c)
{
if (ModelState.IsValid)
{
//do something
return Redirect("/Main");
}
else
{
return View();
}
}
答案 0 :(得分:5)
重点是//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));
}
}
答案 1 :(得分:0)
return ModelState.IsValid ? Redirect("/Main"):View();
作为起点将是您需要的唯一一条线。
答案 2 :(得分:-2)
对于过于频繁调用的函数,创建一个静态类并在其中定义所有这些函数。
例如如下
public static class MyAppStaticClass
{
public static SavePerson(Person p)
{
... // your body
}
}
然后,您可以在需要时将其引用为MyAppStaticClass.SavePerson
。