我有一个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/
• 404 在 Tomcat 上通过 eclipse 运行项目时
• 'Logging' 在命名空间 Microsoft.Extensions 中不存在
• 是否可以在分别具有不同域的两个api服务器之间共享cookie?
• 用 AllowAnonymous 装饰的端点仍然期待身份验证授权
• error CS0234:命名空间“Microsoft.VisualBasic”中不存在类型或命名空间名称“Devices”(是否缺少程序集引用?)
• 当我将 Android 应用程序发布到 Google Play 时,我必须拥有域吗?