再保理控制器';s asp.net mvc3中的操作

本文关键字:net asp mvc3 操作 控制器 | 更新日期: 2023-09-27 18:20:22

我(在同一控制器内)为不同的Models编写了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();
        }
    }

再保理控制器';s asp.net mvc3中的操作

要点是//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));
    }
}
return ModelState.IsValid ? Redirect("/Main"):View();

作为起点将是你唯一需要的线路。

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

例如,类似于以下

public static class MyAppStaticClass
{
    public static SavePerson(Person p)
    {
        ... // your body
    }
}

然后,只要需要,就可以像MyAppStaticClass.SavePerson一样引用它。