Sitecore多站点,MVC无法正常工作

时间:2015-11-18 09:31:27

标签: sitecore sitecore-mvc

System.InvalidOperationException:找到了与名为“Home”的控制器匹配的多个类型。如果为此请求提供服务的路由('{* pathInfo}')未指定名称空间来搜索与请求匹配的控制器,则会发生这种情况。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由。

'Home'的请求找到了以下匹配的控制器: SitecoreMVC.Areas.Site1.Controllers.HomeController SitecoreMVC.Areas.Site2.Controllers.HomeController

上面是我使用MVCAreas得到的错误,我扩展了Controller Rendering模板并添加了另外两个字段Area和Namespace,在初始化路由期间我正在做AreaRegistration.RegisterAllAreas();

我还使用我的自定义处理器扩展了GetRendererProcessor,并且我在执行方法中遇到了controllerrunner错误,因为编译器无法解析正确的控制器,在下面的代码名称空间中传递区域但仍然会抛出错误。

  

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

3 个答案:

答案 0 :(得分:1)

使用我在博客上发布的解决方案时,您可以限制命名空间在每个sitecore-site中搜索: http://www.chrisvandesteeg.nl/2014/06/13/sitecore-mvc-in-a-multisite-environment-areas/

调用Render方法时,ToString()会返回什么?

答案 1 :(得分:0)

Sitecore ControllerFactory目前不允许拥有多个名称相同的控制器。您必须为每个控制器选择不同的名称,或者将控制器的完整名称(包括程序集)添加到控制器渲染中:

SitecoreMVC.Areas.Site1.Controllers.HomeController, SitecoreMVC

答案 2 :(得分:0)

在Sitecore 8.1 MVC区域支持开箱即用,也许您可​​以使用Sitecore 8.1而不是8.0 http://ctor.io/new-in-sitecore-8-1-mvc-areas/

相关问题