首先要了解为什么我需要这个。我目前正在创建一个CMS。如果你想象这个CMS有一个PageController,它提供标准页面需要的所有信息,内容,导航等。
现在可以为使用它的每个客户修改CMS,如果客户在其页面中需要额外/不同的信息,我想覆盖默认的PageController,并根据他们的需要量身定制。
这就是我的尝试:
基本控制器
namespace CMS.Core.Controllers {
public class PageController : Controller {
public virtual ActionResult DisplayHome() {
// Logic
return View();
}
}
}
客户特定控制器
namespace CMS.ClientCore.Controllers {
public class PageController : Core.Controllers.PageController {
public override ActionResult DisplayHome() {
return Content("Client Home"); // Just for testing
}
}
}
路线
routes.MapRouteInLowercase(
"Home",
"",
new { controller = "Page", action = "DisplayHome" },
new[] { "CMS.Core.Controllers", "CMS.ClientCore.Controllers" }
);
错误
“页面”请求找到了以下匹配的控制器: PCCMS.Core.Controllers.PageController
PCCMS.ClientCore.Controllers.PageController
错误的原因很明显,是否有另一种方法来覆盖控制器/控制器操作?
答案 0 :(得分:2)
您正在以错误的方式解决问题。
创建IContentProvider
使用的PageController
,让内容提供商确定当前客户需要的内容。