【问题标题】:The controller for path '/' was not found or does not implement IController in Sitecore找不到路径“/”的控制器或未在 Sitecore 中实现 IController
【发布时间】:2014-09-25 05:59:57
【问题描述】:

我正在从 Here 学习 Sitecore 中的控制器渲染。

我创建了一个简单的控制器(HelloWorld)和相关视图(Index.schtml)。在 Sitecore Explorer 的渲染部分映射它(使用名称 PageContent)...并在 Sitecore Explorer 的内容部分的主页项中添加渲染项。但是当我浏览它时,它给出了错误。

The controller for path '/' was not found or does not implement IController. 

我读过的所有帖子都与 Asp .Net MVC ..但我有与 Sitecore MVC 相关的问题

Sample.html(Sitecore Explorer 渲染部分中的页面内容)

@using Sitecore.Mvc

<html>
<body>
    @Html.Sitecore().Placeholder("content")

    <p>Today's date is @DateTime.Now.ToShortDateString()</p>
</body>

</html>

只有这条线给出了问题

@Html.Sitecore().Placeholder("content")

如果我删除此行...它可以正常工作并且浏览器上的页面显示日期和时间

索引.html

<p>Hello from Controller -todays Date is @DateTime.Now.ToString()</p>

控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVC.Controllers
{
    public class HelloWorldController : Controller
    {
        //
        // GET: /HellowWorld/

        public ActionResult Index()
        {
            return View();
        }

    }
}

【问题讨论】:

    标签: c# .net controller sitecore sitecore-mvc


    【解决方案1】:

    如果您已包含默认 MVC 路由,则可能会发生这种情况,因为它们会覆盖 Sitecore 自己的控制器实现。

    确保您已从 RouteConfig.cs/Global.cs 中删除以下行(取决于 MVC 版本);

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

    【讨论】:

      【解决方案2】:

      请检查您的项目引用的 System.Web.Mvc.dll 的版本。它可能晚于 Sitecore Website\Bin 文件夹中的同一个 dll。请确保您的项目引用与 Website\Bin 文件夹中相同版本的 System.Web.Mvc.dll。

      仅供参考。在ControllerRendering中指定控制器函数有两种方式:

      • 仅通过控制器名称。 (请省略中的“控制器”后缀 本例)
      • 完全限定名。例如 “Project.Controllers.HelloWorldController,项目”。在这种情况下,请不要省略“Controller”后缀。

      【讨论】:

      • 这里发生的事情是微软的一些安全更新将 MVC 3 的版本升级到了 3.0.0.1。该网站绑定到 3.0.0.1,但我使用的编译库仍然绑定到 3.0.0.0,并且它们无法理解我的控制器。
      • "仅通过控制器名称。" - 每次都能得到我!
      • @gerzson 该死,投反对票完全是非自愿的,在一些标签洗牌后误点击,对不起......
      【解决方案3】:

      我想补充的还有以下几点。我在 Sitecore 中得到了相同的答案,然后我注意到需要以下项目类型。

      布局 -> 控制器 -> [控制器项引用类型]

      我为每个控制器创建了每个控制器项,这似乎弥合了渲染下内容树中的控制器渲染项与代码中的实际控制器之间的差距。该控制器项的内容提供了存储控制器代码的命名空间和dll以及控制器动作指向的动作。

      我希望这会有所帮助。自从使用这些项目后,错误就消失了。顺便说一下,在我的示例中,我使用的是 Sitecore 8.0。

      【讨论】:

        【解决方案4】:

        我在我的程序中遇到了同样的错误。实际上我有一个类可以将 Partial View To 渲染为字符串,但是我犯了一个可怕的错误并且错误地放置了函数参数。

        PartialToStringClass.RenderPartialView("ManageEmails", "RecoveryPassword", user);
        

        第一个参数是我的控制器名称,第二个参数是我的部分视图名称。 但是我误会了他们的位置。

        【讨论】:

          【解决方案5】:

          除了 Carlos 的回答,我还必须在 CMS 中的 Models 下添加我的模型:

          【讨论】:

            【解决方案6】:

            这可能与 MVC 安装在不同服务器上的不同位置有关,但是将 IIS 中应用程序的“应用程序池标识”更改为“LocalSystem”为我解决了这个问题。我回收了应用程序的应用程序池并在更改后重新启动了应用程序的 Web 服务。

            【讨论】:

              【解决方案7】:

              ---工作解决方案---

              这个错误会因为你的解决方案参考文件夹中的Sitecore.Web.Mvc.Dll版本不同(项目名称->参考->Sitecore.Web.Mvc->右键单击并检查属性)和版本视图文件夹中的 Web.Config 中的 Sitecore.Web.Mvc.Dll。

              要解决此错误,您必须确保两个文件夹中的 Sitecore.Web.Mvc.Dll 版本相同。

              谢谢。

              【讨论】:

                【解决方案8】:

                我的项目中的问题是我使用的是 asp.net mvc 5.2.4,但 sitecore 的默认安装使用的是 5.2.3,并且在我的视图文件夹中的 web.config 中使用了错误的版本并且出现错误没有显示版本不匹配!将我的解决方案降级到 5.2.3 后,它可以工作了。

                我在另一个帖子上找到了这个。我使用脚本安装了 Sitecore 9.1,并且 Views 文件夹中的 web.config 确实引用了 5.2.3,所以我厌倦了将 System.Web.Mvc 降级到 5.2.3,因为这表明并将 .dll 复制/粘贴到我的sc910.sc 实例,但它没有解决问题。仍在寻找解决方案。

                更新

                我接受了 Sitecore 9.1 培训,但在此过程中我遇到了同样的问题。结果我得到了错误,因为我没有(Visual Studio)发布我的整个项目。创建新控制器后,需要重新构建项目,否则 .dll 不会更新并且会发生错误。建议您创建发布配置文件,然后使用 发布网络 按钮执行此操作。

                另外需要指出的重要一点是,发布您的项目之前,我强烈建议您展开您的References,选择所有引用,打开属性菜单,然后设置Copy Local 属性为 False。如果您不这样做,如果您的 wwwroot 项目和 out of wwwroot 项目不包含完全相同的 .dll 版本,您的 .dll 将导致问题,这会导致臀部疼痛。另外,我强烈建议将 both 您的主 web.config 和位于您的 Views 文件夹中的 Build Action 属性设置为,如果不这样做,最终会出现编译错误。

                【讨论】:

                  【解决方案9】:

                  我也遇到了这个问题。我通过

                  解决了
                  1. 更新 views/web.config 以包含指向 DotNetCompilerPlatform 类型的编译器节点。
                  2. 更新项目引用以确保将相同版本的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 输出到 bin 文件夹。
                        <system.codedom>
                          <compilers>
                            <compiler language="c#;cs;csharp" extension=".cs"                type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                                      warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
                           </compiler>
                          </compilers>
                       </system.codedom>
                  

                  【讨论】:

                    【解决方案10】:

                    我又遇到了这个错误。在最近的这种情况下,这是因为我的渲染项的 controller 字段拼写错误。您可以在 controller 字段中使用完全限定名称以避免命名空间冲突。在我的例子中,正确的完全限定名称如下:

                    所以第一部分是完整的命名空间路径,包括控制器名称,后跟逗号,然后是项目名称:

                    【讨论】:

                      【解决方案11】:

                      请确保将控制器包含在网站项目的 proj 文件中...我不小心将 proj 文件留在了本地排除更改中,因此它在本地工作,但当代码到达测试环境时出现此错误。在认为这是 Sitecore 问题几个小时后,我意识到这对我来说要简单得多。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2012-12-10
                        • 2013-05-31
                        • 1970-01-01
                        • 2016-11-26
                        • 2020-07-20
                        • 1970-01-01
                        相关资源
                        最近更新 更多