2

我正在使用显然也支持区域的 sitecore 8.1。为了让 POC 继续进行,我从下面下载了 sitecore81areas 项目:

https://github.com/LonghornTaco/Sc81Areas

并添加了一个简单的 hello world 控制器。

但是,我在尝试访问 sitecore 项目时收到以下错误:

[ExceptionWrapper: The controller for path '/' was not found or does not implement IController.]
[ControllerCreationException: Could not create controller: 'Sc81Areas.Web.Areas.Site1.Controllers.Hello'. 
The context item is: '/sitecore/content/Site1'. 
The current route url is: '{*pathInfo}'. This is the default Sitecore route which is set up in the 'InitializeRoutes' processor of the 'initialize' pipeline. ]
   Sitecore.Mvc.Controllers.SitecoreControllerFactory.CreateController(RequestContext requestContext, String controllerName) +202
   Sitecore.Mvc.Controllers.ControllerRunner.GetController() +23
   Sitecore.Mvc.Controllers.ControllerRunner.Execute() +43
   Sitecore.Mvc.Presentation.ControllerRenderer.Render(TextWriter writer) +134
   Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Render(Renderer renderer, TextWriter writer, RenderRenderingArgs args) +30
   Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Process(RenderRenderingArgs args) +75
   (Object , Object[] ) +74
   Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +484
   Sitecore.Mvc.Pipelines.PipelineService.RunPipeline(String pipelineName, TArgs args) +184
   Sitecore.Mvc.Pipelines.Response.RenderPlaceholder.PerformRendering.Render(String placeholderName, TextWriter writer, RenderPlaceholderArgs args) +216
   (Object , Object[] ) +74
   Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +484
   Sitecore.Mvc.Pipelines.PipelineService.RunPipeline(String pipelineName, TArgs args) +184
   Sitecore.Mvc.Helpers.SitecoreHelper.Placeholder(String placeholderName) +259
   ASP._Page_Areas_Site1_Views_Shared_Site1DefaultLayout_cshtml.Execute() in c:\sitecore\sitecore81\Website\Areas\Site1\Views\Shared\Site1DefaultLayout.cshtml:19
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +253
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +148
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +122
   System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) +137
   Sitecore.Mvc.Presentation.ViewRenderer.Render(TextWriter writer) +221
[InvalidOperationException: Error while rendering view: '/Areas/Site1/Views/Shared/Site1DefaultLayout.cshtml' (model: 'Sitecore.Mvc.Presentation.RenderingModel, Sitecore.Mvc').

我禁用了默认路由配置:

//routes.MapRoute(
            //    name: "Default",
            //    url: "{controller}/{action}/{id}",
            //    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            //);

  1. 在布局上添加了区域。
  2. 删除了区域注册下的默认路由。
  3. 在站点节点上添加了 mvcarea

错误仍然存​​在。我有点困惑到底什么可能是根本原因(可能是配置设置或 DI)。

不确定我的控制器是否需要从特定的站点核心控制器继承。

您的帮助将不胜感激。

更新:

我想分享我的代码,但它很安静。基本上我从下面的 repo 下载了 SC81Areas 项目并添加了 hello 控制器:

https://github.com/LonghornTaco/Sc81Areas

4

2 回答 2

1

我有相同的堆栈跟踪相同的错误消息。我的问题是控制器渲染中控制器的名称。我用后缀“控制器”写了它,这是错误的。

在此处输入图像描述

于 2016-04-04T15:12:57.323 回答
0

因为您说您已禁用默认路由器配置,因此我认为您应该注册一个通过控制器访问的路由器。示例:youdomain.com/example

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            name: "Example",
            url: "Home/Example",
            defaults: new { controller = "Home", action = "Example" }
        );

        //routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        //routes.MapRoute(
        //    name: "Default",
        //    url: "{controller}/{action}/{id}",
        //    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        //);
    }

请让我知道它是否有用。

于 2015-10-27T08:34:11.690 回答