2015-11-18 4 views
0

System.InvalidOperationException: Найдено несколько типов, которые соответствуют контроллеру с именем «Главная». Это может произойти, если маршрут, обслуживающий этот запрос ('{* pathInfo}'), не определяет пространства имен для поиска контроллера, который соответствует запросу. Если это так, зарегистрируйте этот маршрут, вызвав перегрузку метода «MapRoute», который принимает параметр «namespaces».Sitecore multisite с MVC не работает

Запрос на «Home» обнаружил следующие контроллеры соответствия: SitecoreMVC.Areas.Site1.Controllers.HomeController SitecoreMVC.Areas.Site2.Controllers.HomeController

Выше ошибка, которую я получаю, используя MVCAreas Кроме того, я расширил шаблон рендеринга контроллера и добавил еще два поля, которые являются зоной и пространством имен, и во время инициализации маршрута я делаю AreaRegistration.RegisterAllAreas();

Я также расширил GetRendererProcessor своим настраиваемым процессором, и я получаю сообщение об ошибке в controllerrunner в методе выполнения, поскольку complier не может разрешить правильный контроллер, в нижнем пространстве имен кода и области передается, но все же он вызывает ошибку.

AreaControllerRenderer.cs

public class AreaControllerRenderer : Renderer 
{ 
    public string Action { get; set; } 
    public string Controller { get; set; } 
    public string Area { get; set; } 
    public string Namespaces { get; set; } 

    public override string CacheKey 
    { 
     get 
     { 
      return "areacontroller::" + Controller + "#" + Action + "#" + Area + "#" + Namespaces; 
     } 
    } 

    public override void Render(System.IO.TextWriter writer) 
    { 
     var controllerRunner = new AreaControllerRunner(Controller, Action, Area, Namespaces); 

     string value = controllerRunner.Execute(); 
     if (string.IsNullOrEmpty(value)) 
     { 
      return; 
     } 
     writer.Write(value); 
    } 

    public override string ToString() 
    { 
     return "Controller: {0}. Action: {1}. Area {2}. Namespaces {3}".FormatWith(new object[] 
     { 
      Controller, 
      Action, 
      Area, 
      Namespaces 
     }); 
    } 
} 

Пожалуйста, помогите !!

Я был в состоянии решить эту проблему, используя полное доменное имя контроллера с именем Ассамблеи, как показано ниже -
SitecoreMVC.Areas.Site1.Controllers.HomeController, SitecoreMVC

+0

какая версия Sitecore вы используете? –

+0

@sitecore альпинист - я использую Sitecore 8.0 –

ответ

0

Sitecore ControllerFactory в настоящее время не позволяет иметь несколько контроллеров с тем же именем. Вы должны выбрать другое имя для каждого контроллера или добавить FULLNAME вашего контроллера (включая сборку) в ваш контроллер визуализации:

SitecoreMVC.Areas.Site1.Controllers.HomeController, SitecoreMVC 
+0

Спасибо за ответ, так что если я правильно понял, мне нужно установить SitecoreMVC.Areas.Site1.Controllers.HomeController в правильное отображение Render? –

+0

Я попытался использовать полное квалификационное имя контроллера в рендеринге контроллера, но теперь он дает ошибку как - [ExceptionWrapper: контроллер для пути '/' не найден или не реализует IController.] [ControllerCreationException: не удалось создать контроллер: «SitecoreMVC.Areas.Site1.Controller.Home». Пункт контекста: '/ sitecore/content/Site1'. –

+0

@ParitoshTripathi попробуйте добавить имя сборки: «SitecoreMVC.Areas.Site1.Controllers.HomeController, AssemblyName» –

1

Вы можете ограничить пространство имен для поиска в расчете Sitecore-сайта при использовании решения О блоге: http://www.chrisvandesteeg.nl/2014/06/13/sitecore-mvc-in-a-multisite-environment-areas/

Что возвращает ваш ToString() при вызове метода Render?

+0

Я тоже пробовал свой блог, но переменная scRoute всегда равна нулю, поскольку переменная MvcSettings.SitecoreRouteName установлена ​​из файла Sitecore.MVC.Config и значением по умолчанию является <параметр name = "Mvc.SitecoreRouteName" value = "Sitecore" /> И метод рендеринга ToString() возвращает - «Контроллер: SitecoreMVC.Areas.Site1.Controller.HomeController, SitecoreMVC. Действие: индекс. Area Site1. Пространства имен SitecoreMVC.Areas.Site1.Controller« –

+0

Является ли пользовательский начальный путь в конце инициализации трубопровода? Попробуйте «фантастический» способ zzzz, такой как zzzz.initializeroutes.config, чтобы быть уверенным, что он включен последним. –

0

В Sitecore 8.1 MVC районы из коробки поддерживается, может быть, вы можете использовать Sitecore 8.1 вместо 8.0 http://ctor.io/new-in-sitecore-8-1-mvc-areas/

+0

На самом деле я знаю, что это работает в Sitecore 8.1, но я хотел попробовать его в более ранних версиях. Спасибо за ваше предложение. –

Смежные вопросы