控制器的动作在具有相同名称的基类的动作之间是不明确的。

时间:2009-12-17 10:51:53

标签: c# asp.net-mvc

控制器类型ContactController上当前的操作请求'索引'在以下操作方法之间不明确:

System.Web.Mvc.ActionResult Index() on type RX.Web.Controllers.ContactController
System.Web.Mvc.ActionResult Index() on type RX.Web.Controllers.CustomControllerBase2[[RX.Core.Model.Contact, RXTechJob.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 

联络管理员:

        public virtual new ActionResult Index()
    {
        return base.Index();
    }

基础控制器:

        public virtual ActionResult Index()
    {

        return View("Index", SelectAll());

    }

为什么会这样?怎么解决?谢谢!

2 个答案:

答案 0 :(得分:5)

您正在创建第二个名为index的方法,MVC不知道如何处理。有关virtual new创建其他非重写方法的讨论,请参阅here

相反,您的联系人控制器会考虑以下内容:

public override ActionResult Index() {
        return base.Index();
}

答案 1 :(得分:0)

感谢您的回答。

因为stackoverflow无法识别我的Gooogle OpenID,所以我创建了一个新帐户并再次回来:)

我无法使用“覆盖”,因为我正在使用T4MVC

所以我这样修理:

基本控制器(将“public”替换为“protected”):

        protected virtual ActionResult Index()
    {

        return View("Index", SelectAll());

    }

联络管理员:

        public virtual new ActionResult Index()
    {
        return base.Index();
    }

在T4MVC自动生成的代码中,可以覆盖它:

        public override System.Web.Mvc.ActionResult Index() {
        var callInfo = new T4MVC_ActionResult(Area, Name, Actions.Index);
        return callInfo;
    }

看起来,现在一切正常。 :)