我有一个Sitecore MVC项目的文件夹结构:
Areas
-- Common
-- Controllers
-- HeaderController
-- Models
-- Views
-- Legal
-- Controllers
-- HeaderController
-- Models
-- Views
我试图从代码中调用一个控制器,我正在传递PageContent.Current.RequestContext
,并用适当的命名空间和区域填充它。
if (!String.IsNullOrWhiteSpace(Area))
{
PageContext.Current.RequestContext.RouteData.DataTokens["area"] = this.Area;
}
if (!String.IsNullOrWhiteSpace(AreaNameSpace))
{
PageContext.Current.RequestContext.RouteData.DataTokens["Namespaces"] = this.AreaNameSpace;
}
return ControllerBuilder.Current.GetControllerFactory().CreateController(PageContext.Current.RequestContext, this.ControllerName);
}
但它仍然抱怨通常的错误:
Multiple types were found that match the controller named 'Header'.
我为每个区域设置了路由,并且这些区域都已在routeconfig.cs中的app_start中注册。
可能是什么问题?这甚至可能吗?
对于我的情况,解决方案是在MVC 5而不是使用
PageContext.Current.RequestContext.RouteData.DataTokens["Namespaces"] = this.AreaNameSpace;
您必须将名称空间定义为IEnumerable <string>
PageContext.Current.RequestContext.RouteData.DataTokens["Namespaces"] = new string[] { this.AreaNameSpace };
您必须将默认路由配置为:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" },
new[]{"<namespace of you main controller (HeaderContriller)>"}
);
你可以在这里参考我的文章:http://www.c-sharpcorner.com/UploadFile/56fb14/working-with-routes-in-mvc-framework/