MVC3没有在外部程序集中调用控制器

时间:2012-04-16 19:20:51

标签: asp.net-mvc-3 asp.net-mvc-routing

我正在尝试在单独的程序集中创建一个区域。根据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使用父命名空间。 我正确注册路线吗?

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

2 个答案:

答案 0 :(得分:0)

您可能希望使用依赖注入来执行此操作。我正在开发一个类似方法的项目(分离组件中的一些控制器),我们正在使用Unity将控制器注入MVC​​项目。也许this网址可​​能会有所帮助

另外请确保相应的dll位于MVC项目的bin文件夹中,因此可以解析类型

答案 1 :(得分:0)

如果是这样的话我真的会感到惊讶,但是MapRoute所期望的Namespace数组类型是字符串,而不是对象。

new string[] { "MyAssembly.MyName.Controllers", " MyAssembly.MyName" }