5

我正在改编一个开源项目(NopCommerce)。它是一个很棒的软件,并支持使用插件的可扩展性。对于一个插件,我想向视图添加信息,为此,我想从控制器继承并覆盖我需要更改的操作。所以这是我的控制器:

public class MyController : OldController{
//stuff

public new ActionResult Product(int productId)
{
 //Somestuff
}

}

我从插件更改了路由,但是当调用此操作时,出现以下错误:

当前对控制器类型“MyController”的操作“产品”请求在以下操作方法之间不明确: MyPlugin 类型上的 System.Web.Mvc.ActionResult Product(Int32) OldController 类型上的 System.Web.Mvc.ActionResult Product(Int32)

有什么办法可以覆盖这个方法吗?(ps:我不能使用override关键字,因为它在OldController中没有标记为virtual、abstract或override)

谢谢,奥斯卡

4

2 回答 2

6

如果 OldController 的方法少,就这样重新声明。

public class MyController : Controller 
{
    private OldController old = new OldController();

    // OldController method we want to "override"
    public ActionResult Product(int productid)
    {
        ...
        return View(...);
    }

    // Other OldController method for which we want the "inherited" behavior
    public ActionResult Method1(...)
    {
        return old.Method1(...);
    }
}
于 2013-02-20T02:46:18.713 回答
0

当然,在控制器上“执行 F12”并查看标记为虚拟的项目

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (Request.Headers.TryGetValue("myHeader", out var value))
        {
            HashId = hashid.ToString();
        }
        base.OnActionExecuting(context);
    }
于 2021-04-14T07:09:15.143 回答