Контроллер для пути «/» не найден или не реализует IController в Sitecore.

Я изучаю рендеринг контроллера в Sitecore здесь .

Я создал один простой контроллер (HelloWorld) и связанный вид (Index.schtml). Сопоставил его (с именем PageContent) в разделе рендеринга Sitecore Explorer... и добавил элемент рендеринга в домашний элемент в разделе контента 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();
        }

    }
}

person user3767164    schedule 25.09.2014    source источник


Ответы (11)


Это может произойти, если вы включили маршруты 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 }
 );
person PizzaTheHut    schedule 25.09.2014

Проверьте версию System.Web.Mvc.dll, на которую ссылается ваш проект. Это может быть позже, чем та же dll в папке Sitecore Website\Bin. Убедитесь, что ваш проект ссылается на ту же версию System.Web.Mvc.dll, что и в папке Website\Bin.

к вашему сведению. Есть два способа указать функцию контроллера в ControllerRendering:

  • Только по имени контроллера. (Пожалуйста, опустите суффикс «Контроллер» в этом случае)
  • По полному имени. Например, "Project.Controllers.HelloWorldController, Project". В этом случае не опускайте суффикс «Контроллер».
person Gerzson    schedule 12.02.2015
comment
Здесь произошло следующее: какое-то обновление безопасности от Microsoft повысило версию MVC 3 до 3.0.0.1. Веб-сайт был привязан к 3.0.0.1, но скомпилированные библиотеки, которые я использовал, все еще были привязаны к 3.0.0.0, и они не могли понять мои контроллеры. - person Juliano; 20.05.2015
comment
Только по имени контроллера. - получает меня каждый раз! - person Dylan McCurry; 08.01.2016
comment
@gerzson, черт возьми, голосование против было совершенно непреднамеренным, щелкнуло по ошибке после перетасовки нескольких вкладок, извините ... - person Wasp; 16.03.2017

Что еще я хотел бы добавить, так это следующее. Я получил тот же ответ в Sitecore, а затем заметил необходимость в следующем типе элемента.

Макет -> Контроллеры -> [Тип ссылки на элемент контроллера]

Я создал каждый элемент контроллера для каждого контроллера, и это, похоже, устраняет разрыв между элементами рендеринга контроллера в дереве содержимого в разделе «Визуализация» и фактическим контроллером в коде. Содержимое этого элемента контроллера предоставляет пространство имен и dll, где хранится код контроллера, и действие, на которое указывает действие контроллера.

Надеюсь, это поможет. После использования этих предметов ошибка исчезла. Кстати, в моем примере я использую Sitecore 8.0.

person Carlos Rodriguez    schedule 29.07.2015

Я столкнулся с той же ошибкой в ​​​​своей программе. На самом деле у меня был класс для рендеринга Partial View To string, но я совершил ужасную ошибку и неправильно указал параметры функции.

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

Первый параметр — это имя моего контроллера, а второй — имя моего частичного представления. Но я по ошибке поменял их местами.

person Somayeh_Hosseini    schedule 13.04.2021

В дополнение к ответу Карлоса мне также пришлось добавить свою модель в CMS в разделе «Модели»:

введите здесь описание изображения

person Igor    schedule 29.09.2017

Это может быть связано с тем, что MVC устанавливается в разных местах на разных серверах, но изменение «идентификатора пула приложений» для приложения в IIS на «LocalSystem» устранило проблему для меня. Я переработал пул приложений для приложения и перезапустил веб-службу для приложения после изменения.

person Steve    schedule 24.10.2018

---Рабочее решение---

Эта ошибка возникает из-за разных версий вашего Sitecore.Web.Mvc.Dll в справочной папке решения (имя проекта-> Ссылки-> Sitecore.Web.Mvc-> щелкните правой кнопкой мыши и проверьте свойства) и версии Sitecore.Web .Mvc.Dll в Web.Config в папке представлений.

Для решения этой ошибки вы должны убедиться, что версия Sitecore.Web.Mvc.Dll одинакова в обеих папках.

Спасибо.

person Akash Mishra    schedule 15.11.2018

Проблема в моем проекте заключалась в том, что я использовал asp.net mvc 5.2.4, но установка по умолчанию из sitecore использовала 5.2.3, а в web.config из папки моих представлений использовалась неправильная версия, и ошибка не отображалась что есть несоответствие версии! После понижения моего решения до 5.2.3 оно заработало.

Я нашел это в другой теме. Я установил Sitecore 9.1 с помощью сценариев, и мой файл web.config в папке Views действительно ссылается на 5.2.3, поэтому я устал понижать версию System.Web.Mvc до 5.2.3, как это предполагает, и копировать/вставлять .dll в мой sc910.sc, но это не решило проблему. Все еще ищу решение.

ОБНОВЛЕНИЕ

Я прошел обучение по Sitecore 9.1, но при этом столкнулся с той же проблемой. Оказывается, я получал сообщение об ошибке, потому что я (Visual Studio) не опубликовал свой весь проект. После создания нового контроллера необходимо пересобрать проект, иначе .dll не обновится и возникнет ошибка. Рекомендуется создать профиль публикации, а затем использовать для этого кнопку опубликовать в Интернете.

Еще одна важная вещь, на которую следует обратить внимание: перед публикацией вашего проекта я настоятельно рекомендую вам развернуть свои Ссылки, выбрать все ссылки, открыть меню свойств, а затем установить >Скопируйте свойство Local в False. Если вы этого не сделаете, ваши библиотеки .dll вызовут проблемы, если ваш проект wwwroot и проект out of wwwroot не содержат одну и ту же версию .dll. боль в прикладе сценарий. Кроме того, я настоятельно рекомендую установить для свойств Build Action в как основной файл web.config, так и файл, расположенный в папке Views, значение Нет, если вы этого не сделаете, вы получите ошибки компиляции.

person Colin    schedule 17.01.2019

Я тоже только что столкнулся с этой проблемой. Я решил это

  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>
person Nona Drake    schedule 09.01.2020

Я снова столкнулся с этой ошибкой. В этом более позднем случае это произошло из-за того, что поле controller моего элемента рендеринга было написано с ошибкой. Вы можете использовать полное имя в поле controller, чтобы избежать конфликтов пространств имен. В моем случае правильное полное имя было следующим:

введите здесь описание изображения

Таким образом, первая часть — это полный путь к пространству имен, включая имя контроллера, за которым следует запятая, а затем имя проекта:

введите здесь описание изображения

введите здесь описание изображения

person Colin    schedule 20.08.2020

Убедитесь, что вы включили контроллер в файл проекта вашего веб-сайта... Я случайно оставил файл проекта в своих локальных исключенных изменениях, поэтому он работал локально, но сломался с этой ошибкой, когда код достиг тестовой среды. Подумав пару часов, что это проблема Sitecore, я понял, что для меня это было намного проще.

person pirsqua    schedule 07.05.2021