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
答案 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/