Sitecore多站点MVC解决方案

时间:2014-06-12 13:42:38

标签: asp.net-mvc asp.net-mvc-4 sitecore sitecore7 sitecore-mvc

我是Sitecore MVC的新手,目前使用网络表单我将所有网站组织在:

\Website\Sites\Site1\css|js|Layouts|Sublayouts|etc.
\Website\Sites\Site{n}\css|js|Layouts|Sublayouts|etc.

我可以将MVC网站添加到我的解决方案中,并与Web表单网站一起正常工作;但是,添加恰好具有相同控制器/视图名称的第二个MVC站点会产生冲突。

例如,如果我为Site1创建一个控制器

Controllers/Site1/FooController (has index and hello)

然后意见是:

Views/Foo/Index
Views/Foo/Hello

但是如果Site2也有一个同名的控制器,那么就是冲突:

Controllers/Site2/FooController (has index and hello)

然后意见是:

Views/Foo/Index
Views/Foo/Hello

但它们被Site1使用。

问题是如何设置恰好具有相同控制器/视图名称的两个(或更多)MVC站点。是否有建议的方法来构建解决方案中的站点,或者我是否必须覆盖管道/处理器?

由于

更新

谢谢大家。区域解决了我的问题但引入了两个新问题:

  1. 控制器名称中的冲突通过将名称空间,类和dll名称放在Sitecore的控制器名称中来解决 - 参考:http://blog.xcentium.com/2014/03/sitecore-mvc-and-duplicate-controller-names/

  2. 当控制器返回视图时,我必须放置视图的完整路径;否则,我找不到视图的错误。 例如:return View(“〜/ Areas / Site1 / Views / Home / Index.cshtml”);

  3. 我正在研究Sitecore论坛开发人员提供的修复: http://www.chrisvandesteeg.nl/2014/06/13/sitecore-mvc-in-a-multisite-environment-areas/

    我会尝试并报告回来。

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

我们遇到了类似的问题,答案是将每个站点与MVC区域分开,并且它们运行良好。虽然我们遇到了控制器名称重复的问题,但可以通过在区域路由注册期间添加命名空间来解决。

但实现这一点的一个简洁方法是让Sitecore了解MVC区域并使用区域和命名空间初始化控制器/操作。这个过程由凯文撰写博客,他也有一个包。它希望您在控制器渲染中定义区域名称。

http://webcmd.wordpress.com/2013/01/24/sitecore-mvc-area-controller-rendering-type/

要避免硬编码视图路径,您始终可以扩展控制器渲染模板以添加视图路径,并创建操作过滤器以在执行操作后添加视图路径。在动作过滤器中添加以下代码,并在sitecore动作过滤器注册管道中注册过滤器。

public void OnActionExecuted(ActionExecutedContext filterContext)
{ 

     ViewResult result= filterContext.Result as ViewResult;
     if(result == null) return;

     Rendering redering = RenderingContext.CurrentOrNull.With(x=>x.Rendering).Return(x=>x,null);

     string viewName= rendering.Return(r=> r.GetFieldValue(CustomMvcSettings.ViewPathField), string.Empty);
     if(String.IsnullOrEmpty(viewName)) return;

     result.ViewName = viewName;

}

答案 2 :(得分:0)

您可以做的最好的事情是在同一解决方案中将您的网站分成不同的项目 在同一个项目中构建两个网站可能会变得非结构化和混乱。

I like to structure it like this

之后,您可以使用不同的名称空间路由具有相同名称的控制器。

Sitecore mvc duplicate controller

答案 3 :(得分:0)

只是为了让这个主题与SDN论坛保持同步,

我建议使用特定于sitecore的约束,如下所述 http://www.chrisvandesteeg.nl/2014/06/13/sitecore-mvc-in-a-multisite-environment-areas/

此解决方案允许您在配置节点上设置属性mvcArea

相关问题