MVC 无法运行的 Sitecore 多站点
Sitecore multisite with MVC not working
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
Sitecore ControllerFactory
目前不允许多个控制器同名。您必须为每个控制器选择不同的名称或将控制器的全名(包括程序集)添加到您的控制器渲染中:
SitecoreMVC.Areas.Site1.Controllers.HomeController, SitecoreMVC
当使用我在博客中提到的解决方案时,您可以限制命名空间在每个 sitecore-site 中搜索:
http://www.chrisvandesteeg.nl/2014/06/13/sitecore-mvc-in-a-multisite-environment-areas/
当调用 Render 方法时,你的 ToString() return 做什么?
在 Sitecore 8.1 中,MVC 区域是开箱即用的,也许您可以使用 Sitecore 8.1 而不是 8.0 http://ctor.io/new-in-sitecore-8-1-mvc-areas/
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
Sitecore ControllerFactory
目前不允许多个控制器同名。您必须为每个控制器选择不同的名称或将控制器的全名(包括程序集)添加到您的控制器渲染中:
SitecoreMVC.Areas.Site1.Controllers.HomeController, SitecoreMVC
当使用我在博客中提到的解决方案时,您可以限制命名空间在每个 sitecore-site 中搜索: http://www.chrisvandesteeg.nl/2014/06/13/sitecore-mvc-in-a-multisite-environment-areas/
当调用 Render 方法时,你的 ToString() return 做什么?
在 Sitecore 8.1 中,MVC 区域是开箱即用的,也许您可以使用 Sitecore 8.1 而不是 8.0 http://ctor.io/new-in-sitecore-8-1-mvc-areas/