2013-02-22 48 views
1

我有一个几乎独立的果园模块。它是一个包含控制器和视图集合的应用程序,并执行它自己的基于EF的数据访问。如何运行我的果园模块?

一旦我在Orchard中安装并激活了这个模块,我该如何请求它的控制器操作并将其作为响应来处理它的视图?我知道它必须有一个Routes类,并且怀疑这是我必须做的事情来启用对我的模块的访问。我知道一个模块实际上是一个区域,但我仍然争取了解Routes课程。

假设我的模块有一个控制器,动作和视图,Home,Index和Index,是Home/Index。一旦乌节路线正常运行,我如何访问这个特定的肌动蛋白Index

+0

与任何MVC操作一样。不要忘记指定该区域作为模块的文件夹名称。 – 2013-02-22 09:06:42

+0

模块文件夹是* Comair.RI *。它有一个'HomeController'和'Index'操作,我有一个'Home/Index'视图。当我尝试url http:// orchard-multi/Comair.RI/Home/Index'时,我得到了Orchard'Not found'错误。没有错误日志。我不知道为什么没有找到。 – ProfK 2013-02-22 09:17:24

回答

1

在果园文档中有一个很好的指南,可供Creating an Orchard Module that uses its own controllers使用。

下面是从指导创建一个名为HelloWorld的模块航线采取了代码示例:如果您创建一个实现IRouteProvider可以让果园知道你的控制器路由类

using System.Collections.Generic; 
using System.Web.Mvc; 
using System.Web.Routing; 
using Orchard.Mvc.Routes; 

namespace HelloWorld { 
    public class Routes : IRouteProvider { 
     public void GetRoutes(ICollection<RouteDescriptor> routes) { 
      foreach (var routeDescriptor in GetRoutes()) 
       routes.Add(routeDescriptor); 
     } 

     public IEnumerable<RouteDescriptor> GetRoutes() { 
      return new[] { 
       new RouteDescriptor { 
        Priority = 5, 
        Route = new Route(
         "HelloWorld", 
         new RouteValueDictionary { 
          {"area", "HelloWorld"}, 
          {"controller", "Home"}, 
          {"action", "Index"} 
         }, 
         new RouteValueDictionary(), 
         new RouteValueDictionary { 
          {"area", "HelloWorld"} 
         }, 
         new MvcRouteHandler()) 
       } 
      }; 
     } 
    } 
} 

+0

我假设'HelloWorld'是模块的名称,而不仅仅是为路由选择的一些任意名称。我复制的例子有一个'null'来代替第二个空的'new RouteValueDictionary()'。让我们希望那是错误。 – ProfK 2013-02-22 10:06:46

+0

该模块被称为HelloWorld。我编辑了答案,使之更清晰一些。 – 2013-02-22 10:17:25