全部,在我的应用程序设计中,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
中的Action2
,Controller1
和Action3
中的Controller2
将调用相同的FunctionA()
,基于DRY理论上,最好定义一个基本控制器或方法的东西,我不知道如何在Asp.net MVC4中制作它。请帮助我。谢谢。
答案 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");
}
...
}