MVC:是否可以覆盖控制器操作?

时间:2011-05-06 10:19:19

标签: asp.net-mvc-3

首先要了解为什么我需要这个。我目前正在创建一个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

错误的原因很明显,是否有另一种方法来覆盖控制器/控制器操作?

1 个答案:

答案 0 :(得分:2)

您正在以错误的方式解决问题。

创建IContentProvider使用的PageController,让内容提供商确定当前客户需要的内容。