为ASP.Net MVC网站创建customBaseController吗?

时间:2018-06-22 20:53:39

标签: c# asp.net-mvc

在我正在处理的项目中,我发现在每个操作的开始和结束时,我都有相同的代码来检索并将对象存储在TempData []中。代码在所有动作之间是一致的,所以我想知道创建一个基本控制器类来进行冗余重构并将对象存储在TempData []中是否合理?

有没有更聪明的方法?

我当前的代码:

public ActionResult Index(StepOne data)
{
    var customer = TempData["customer"] as Customer;

    //do stuff with customer

    TempData["customer"] =customer;

    return View();
}

1 个答案:

答案 0 :(得分:0)

为什么不创建一个名称为BaseController或其他控制器的控制器,然后像下面编写的代码一样从该BaseController继承其他控制器。

//Your base controller
public class BaseController : Controller
{
    //This will be executed after every action call on the controllers inherited from this BaseController.
    //You can use OnActionExecuting in case you want the execution before the actions execution in your other controllers.
    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        Controller controller = filterContext.Controller as Controller;
        if (controller != null)
        {
            var customer = controller.TempData["customer"] as Customer;

            //do stuff with customer

            controller.TempData["customer"] = customer;
        }
    }
}

//Then your other controller
public class HomeController : BaseController
{
    public ActionResult Index(StepOne data)
    {
        //You can get your TempData here too.
        var customer = TempData["customer"] as Customer;
        return View();
    }
}

请告诉我它是否不起作用,或者您需要将此代码更改为其他某种行为。