C# 重新分解控制器';asp.net mvc3中的s操作

C# 重新分解控制器';asp.net mvc3中的s操作,c#,asp.net-mvc,asp.net-mvc-3,refactoring,C#,Asp.net Mvc,Asp.net Mvc 3,Refactoring,我正在为不同的型号编写此操作代码(在同一控制器内)10多次。是否有任何方法可以减少此代码,或者如何创建通用操作 [HttpPost] public ActionResult SavePerson(Person p) { if (ModelState.IsValid) { //do something return Redirect("/Main"); } els

我正在为不同的
型号
编写此操作代码(在同一控制器内)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();
        }
    }

对于将被频繁调用的函数,创建一个静态类并在其中定义所有此类函数

比如像下面这样

public static class MyAppStaticClass
{
    public static SavePerson(Person p)
    {
        ... // your body
    }
}
然后,您可以在需要时像
MyAppStaticClass.SavePerson
一样引用它

return ModelState.IsValid ? Redirect("/Main"):View();

因为起点是你唯一需要的一行。

主要的一点是,
//做点什么
每个动作的部分总是不同的。因此,让我们尝试减少除此之外的所有代码。您可以使用基本控制器

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);
        }
    }
}

但是我必须创建多个动作。是的,我只是简单地分解了每个动作中的内容,我对mvc3不太熟悉,所以动作等等-不太确定,但是删减你需要的代码,希望有人能帮你做动作,你可以删减整个动作……哦,好吧……你的意思是说你想对if(ModelState.IsValid)和redirect/return语句进行重构……对不起,我以为你在找重构
//做点什么
public class DerivedController : BaseController
{
    [HttpPost]
    public ActionResult Create(Person person)
    {
       return HandlePost(person, p => _repository.Save(p));
    }
}