我正在尝试在单独的程序集中创建一个区域。根据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使用父命名空间。 我正确注册路线吗?
只要控制器在我的容器中,并且命名空间匹配,它应该解析并被调用吗?主装配中的控制器工作正常。
答案 0 :(得分:0)
您可能希望使用依赖注入来执行此操作。我正在开发一个类似方法的项目(分离组件中的一些控制器),我们正在使用Unity将控制器注入MVC项目。也许this网址可能会有所帮助
另外请确保相应的dll位于MVC项目的bin文件夹中,因此可以解析类型
答案 1 :(得分:0)
如果是这样的话我真的会感到惊讶,但是MapRoute所期望的Namespace数组类型是字符串,而不是对象。
new string[] { "MyAssembly.MyName.Controllers", " MyAssembly.MyName" }