1

我正在尝试在单独的程序集中创建一个区域。根据 RouteDebugger,我的路由看起来是正确的,但我收到“路径 {0} 的控制器未找到或未实现 IController”。错误。

我验证了控制器已在我的容器中注册,但在我在路由中指定的不同命名空间下。

路线登记:

    routes.MapRoute(
        "EventCalendar", 
        "EventCalendar/{action}/{id}", 
        new { controller = "EventCalendar", action = "Index", id = UrlParameter.Optional }, 
        new[] { "MyAssembly.MyName.Controllers", " MyAssembly.MyName" }
    );

控制器:

namespace MyAssembly.MyName.Controllers
{
    public class EventCalendarController : Controller
    {
        public PartialViewResult Index()
        {
            return new PartialViewResult
            {
                ViewName = "~/Views/EventCalendar/Index.cshtml",
                ViewData = new ViewDataDictionary<object>(this.ViewData.Model)
            };
        }
    }
}

我在路由中指定了控制器的命名空间和父命名空间。我看过的例子并不清楚需要哪一个。OrchardCMS 使用父命名空间。我是否正确注册了路线?

只要控制器在我的容器中,并且命名空间匹配,它就应该解析并被调用,对吗?主组件中的控制器工作正常。

4

2 回答 2

0

你可能想使用依赖注入来做到这一点。我正在开发一个具有类似方法的项目(分离程序集中的一些控制器),我们正在使用 Unity 将控制器注入 MVC 项目。也许这个网址可能会有所帮助

另外请确保对应的dll在你的MVC项目的bin文件夹下,这样可以解析类型

于 2012-04-16T19:45:58.667 回答
0

如果是这样,我实际上会感到惊讶,但是 MapRoute 期望的命名空间数组是字符串类型,而不是对象。

new string[] { "MyAssembly.MyName.Controllers", " MyAssembly.MyName" }
于 2012-04-16T19:46:26.323 回答