未找到路径控制器...或未实现IController

时间:2016-07-22 17:42:36

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

我正在使用c#编写使用ASP.NET MVC 5的应用程序。我需要在应用程序的右上角添加一个全局菜单。我被告知other SO要使用ChildActionOnly属性的操作。

所以这就是我所做的。

我创建了一个这样的BaseController

public class BaseController : Controller
{

    [ChildActionOnly]
    public ActionResult ClientsMenu()
    {
        using (SomeContext db = new SomeContext())
        {
            return PartialView(db.Database.SqlQuery<Client>("SELECT * FROM clients").ToList());
        }
    }

}

然后我从BaseController继承了我的所有控制器

public class TasksController : BaseController
{

    public ActionResult Index(int ClientId)
    {
        ...
        return View();
    }

    public ActionResult Show(int SurveyId)
    {
        ...
        return View();
    }

}

要在我的布局中呈现ClientsMenu,我添加了以下代码

@Html.Action("ClientsMenu", "Menus")

现在,当我运行我的应用程序时,我收到以下错误

The controller for path '/Tasks/Index' was not found or does not implement IController.

当我从布局中删除@Html.Action("ClientsMenu", "Menus")时,一切正常,但当然不会显示全局菜单。

我该怎么做才能解决这个问题?

更新 以下是我从以下评论中得到的反馈后所做的事情

public class TasksController : Controller
{
    [ChildActionOnly]
    public ActionResult ClientsMenu()
    {
        using (SomeContext db = new SomeContext())
        {
            return PartialView(db.Database.SqlQuery<Client>("SELECT * FROM clients").ToList());
        }
    }

    public ActionResult Index(int ClientId)
    {
        ...
        return View();
    }

    public ActionResult Show(int SurveyId)
    {
        ...
        return View();
    }

}

但仍然是同样的错误

1 个答案:

答案 0 :(得分:0)

ClientMenus中取出BaseController动作并将其放入自己的控制器MenusController。然后,您可以从视图中调用该控制器。

@Html.Action("ClientsMenu", "Menus")

在您的示例中,您没有MenusContoller @Html.Action("ClientsMenu", "Menus")正在寻找的内容。

另一篇帖子链接的Phil Haacked - Html.RenderAction and Html.Action文章为您提供了一个很好的示例。

相关问题