具有命名空间和区域的路由仍然抱怨多个控制器名称

时间:2015-06-16 17:27:12

标签: c# asp.net-mvc sitecore asp.net-mvc-routing sitecore8

我的Sitecore MVC项目有一个文件夹结构:

R178 Esc

我正在尝试从代码调用控制器,我正在传递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);
        }

我为每个区域设置了路由,并且这些区域都已在routeconfig.cs中的app_start中注册。

可能是什么问题?这甚至可能吗?

2 个答案:

答案 0 :(得分:0)

对于我来说,解决方案是在MVC 5中代替使用

PageContext.Current.RequestContext.RouteData.DataTokens["Namespaces"] = this.AreaNameSpace;

您必须将名称空间定义为IEnumerable

PageContext.Current.RequestContext.RouteData.DataTokens["Namespaces"] = new string[] { this.AreaNameSpace };

请参阅Peter中的asp.net mvc Find Controller By Name With Area评论。

答案 1 :(得分:-3)

您必须将默认路由配置为:

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/