如何覆盖Mvc

时间:2016-04-13 20:00:24

标签: c# asp.net-mvc

我正在使用Cms作为Mvc。此Cms具有以下控制器:

public class OrderController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

对于自定义需求,我想覆盖此控制器的行为,并在用户访问相同的URL时返回不同的内容。为了达到这个结果,最好的方法是什么?

我尝试继承Cms控制器并使ActionResult成为覆盖,遵循以下答案:How to override controller actionresult method in mvc3?

public class OrderController : Cms.Areas.Admin.Controllers.OrderController
{
    public override ActionResult Index(Guid orderItemId)
    {
        // Do extra stuff

        return View();
    }
}

但这不起作用。当我尝试导航“admin / order”时,我仍然进入Cms Controller / Action。

有什么建议吗?

注意:我试图覆盖的控制器在另一个程序集中,操作设置为虚拟。它位于Area中,因此Route在AreaRegistration中配置。

2 个答案:

答案 0 :(得分:0)

您的请求需要使用OrderController而不是EcommerceOrderController,请查看您的MVC routes

答案 1 :(得分:0)

在我看来,这是一个路由问题。如果您的路线仍指向原始路线,则覆盖控制器无关紧要。如果您想要一个URL来调用您的操作,您需要添加一个优先级高于当前解析为原始路由的路由。