路径'/'的控制器未找到或未在Sitecore中实现IController

时间:2014-09-25 05:59:58

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

我正在从Here学习Sitecore中的Controller渲染。

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

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")

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

的index.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();
        }

    }
}

11 个答案:

答案 0 :(得分:9)

如果您已包含默认的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 }
 );

答案 1 :(得分:3)

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

FYI。在ControllerRendering中有两种指定控制器功能的方法:

  • 仅按控制器名称。 (请省略&#34; Controller&#34;后缀 这个案例)
  • 由完全限定名称。例如 &#34; Project.Controllers.HelloWorldController,Project&#34;。在这种情况下,不要省略&#34;控制器&#34;后缀。

答案 2 :(得分:1)

我想补充的其他内容如下。我在Sitecore中得到了相同的答案,然后我注意到需要以下项目类型。

布局 - &gt;控制器 - &gt; [控制器项目参考类型]

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

我希望这会有所帮助。由于使用这些项目,错误已经消失。我在我的例子中使用Sitecore 8.0。

答案 3 :(得分:1)

我在我的程序中遇到了同样的错误。其实我有一个类来渲染 Partial View To 字符串,但是我犯了一个可怕的错误,把函数参数放错了。

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

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

答案 4 :(得分:0)

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

enter image description here

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

此错误将因解决方案参考文件夹中的Sitecore.Web.Mvc.Dll版本不同(项目名称->参考-> Sitecore.Web.Mvc->右键单击并检查属性)以及版本不同而出现视图文件夹中Web.Config中的Sitecore.Web.Mvc.Dll。

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

感谢。

答案 7 :(得分:0)

  

我的项目中的问题是我正在使用asp.net mvc 5.2.4,但是从sitecore进行的默认安装是使用5.2.3,并且在我的views文件夹的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 ,选择所有引用,打开属性菜单,然后设置复制本地属性为。如果不这样做,如果您的 wwwroot 项目和 wwwroot 项目中的都不包含完全相同的.dll版本,则.dll将导致问题。屁股场景中的痛苦。另外,我强烈建议将主要web.config和视图文件夹中的两者中的 Build Action 属性设置为,如果不这样做,将导致编译错误。

答案 8 :(得分:0)

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

解决了
  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>

答案 9 :(得分:0)

我再次遇到此错误。在最近的情况下,这是因为我的渲染项目的controller字段拼写错误。您可以在controller字段中使用标准名称,以避免名称空间冲突。在我的情况下,正确的完全限定名称如下:

enter image description here

因此,第一部分是完整的名称空间路径,包括控制器名称,逗号,项目名称:

enter image description here

enter image description here

答案 10 :(得分:0)

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