如果所有动作在Asp.net MVC4中调用相同的功能怎么办?

时间:2012-11-07 12:32:24

标签: asp.net-mvc

全部,在我的应用程序设计中,Controller类的一些操作将在调用时首先调用相同的方法。代码片段如下所示。请查看它。谢谢。

public class Controller1 : Controller
    {

        public ActionResult Action1()
        {
            FunctionA(); //This function must be called firstly.This function is defined somewhere. 
            return View("a1");
        }

        public ActionResult Action2()
        {
            FunctionA(); 
            return View("a2");
        }

    }

public class Controller2 : Controller
    {

        public ActionResult Action3()
        {
            FunctionA(); 
            return View("a3");
        }

        public ActionResult Action4()
        {
            FunctionB(); 
            return View("a4");
        }

    }

在目前的情况下,Action1中的Action2Controller1Action3中的Controller2将调用相同的FunctionA(),基于DRY理论上,最好定义一个基本控制器或方法的东西,我不知道如何在Asp.net MVC4中制作它。请帮助我。谢谢。

2 个答案:

答案 0 :(得分:0)

这并不是那么简单。如果他们只是共享一些代码,那并不一定意味着他们应该有一个实现该功能的公共基类。您正在考虑代码中的细节来驱动您的界面。

我不能在不了解具体细节的情况下回答这个问题,但只要他们所使用的代码都在一个地方,你就会朝着正确的方向前进。

答案 1 :(得分:0)

只有您可以回答这个问题,因为答案主要取决于您的设计。

如果您的FunctionA方法特定于该控制器,那么您可以引入基类。但是,您也可以使用辅助类,甚至只使用扩展方法(如果它足够通用)来实现DRY体系结构。

关于如何在您的操作中调用它,如果必须在执行之前运行,那么我建议您引入一个自定义ActionFilterAttribute,您可以使用它来装饰每个行动,例如

public class Controller1 : Controller
{
    [FunctionAAttribute]
    public ActionResult Action1()
    {
        return View("a1");
    }

    [FunctionAAttribute]
    public ActionResult Action2()
    {
        return View("a2");
    }
}

或者如果必须在该特定控制器上的每个操作之前运行,只需装饰控制器即可。

[FunctionAAttribute]
public class Controller1 : Controller
{
    public ActionResult Action1()
    {
        return View("a1");
    }

    ...
}