假设我有很多Controllers
,而且很多此Controllers
共享Action
。分享这些常见Actions
以消除重复代码的最佳方式是什么?
我知道的一种方法是将这些常见的Actions
重构为父abstract Controller
,就像这样......
public abstract class BaseController : Controller {
//handles common help page for all controllers
public ActionResult Help(string helpTopic) {
..open help page..
return View(page);
}
}
//now Controller1 and Controller2 has the help page for free!
public class Controller1: BaseController {
}
public class Controller2: BaseController {
}
但是如果我试图覆盖任何子控制器中的Help
动作,那么......
//customized help page for Controller1
public class Controller1: BaseController {
public new ActionResult Help(string helpTopic) {
.. my own customized help page..
return View(page);
}
}
我会收到错误 The current request for action 'Help' on controller type 'Controller1' is ambiguous between....
那么如何覆盖父控制器方法?
答案 0 :(得分:0)
我成功覆盖父控制器方法的做法是将方法标记为virtual
并在子控制器方法中使用override
关键字,如此...
public abstract class BaseController : Controller {
//handles common help page for all controllers
public virtual ActionResult Help(string helpTopic) {
..open help page..
return View(page);
}
}
//Controller1 has a customized help page
public class Controller1: BaseController {
public override ActionResult Help(string helpTopic) {
.. my own customized help page..
return View(page);
}
}
//Controller2 has help page for free!
public class Controller2: BaseController {
}