本文是阅读Orchard在线文档的笔记,原文见:http://www.orchardproject.net/docs/Building-a-hello-world-module.ashx,虽然对MVC知之甚少、对Razor还比较陌生,学习Orchard也刚刚开始,但也要坚持不懈的学习下去。
HelloWorld模块是一个非常简单的Orchard模块,其功能就是在浏览器里显示一段欢迎文本,所以只需要定义控制器和视图,不需要定义模型。
从ASP.NET MVC的角度看,模型是作为MVC Areas实现的。在MVC中Areas是包含许多功能的子站点,Areas彼此之间是相对隔离的。一个Orchard模块就是一个简单的带有清单的area。它可以使用Orchard的API。
1. 生成模块结构
打开Orchard命令行,输入以下命令来创建HelloWorld模块:
codegen module HelloWorld
执行这个命令后,会发现在网站根目录下的Modules文件夹中有一个HelloWorld文件夹,打开即可看到里面的结构,其中可以发现Orchard实际上是为我们创建了一个VS项目(HelloWorld.csproj),这样既可以使用VS2010开发模块,当然也可以使用任何一种文本编辑器来开发模块。
2. 修改清单
在HelloWorld根目录中有一个module.txt文件,这是描述此模块的清单文件,用于描述模块的名称,状态,作者,版本和包含的功能等内容,注意它的缩进用的是空格,不是制表符。
可以根据需要修改清单中的内容。
3. 添加路由
很显然这个模块是需要一个地址的,所以要给这个模块添加一个路由文件Route.cs,并放在HelloWorld根目录下:
1: using System.Collections.Generic;<!--CRLF-->
2: using System.Web.Mvc;<!--CRLF-->
3: using System.Web.Routing;<!--CRLF-->
4: using Orchard.Mvc.Routes;<!--CRLF-->
5:
<!--CRLF-->
6: namespace HelloWorld {<!--CRLF-->
7: public class Routes : IRouteProvider {<!--CRLF-->
8: public void GetRoutes(ICollection routes) {<!--CRLF-->
9: foreach (var routeDescriptor in GetRoutes())<!--CRLF-->
10: routes.Add(routeDescriptor);
<!--CRLF-->
11: }
<!--CRLF-->
12:
<!--CRLF-->
13: public IEnumerable GetRoutes() {<!--CRLF-->
14: return new[] {<!--CRLF-->
15: new RouteDescriptor {<!--CRLF-->
16: Priority = 5,
<!--CRLF-->
17: Route = new Route(<!--CRLF-->
18: "HelloWorld",<!--CRLF-->
19: new RouteValueDictionary {<!--CRLF-->
20: {"area", "HelloWorld"},<!--CRLF-->
21: {"controller", "Home"},<!--CRLF-->
22: {"action", "Index"}<!--CRLF-->
23: },
<!--CRLF-->
24: new RouteValueDictionary(),<!--CRLF-->
25: new RouteValueDictionary {<!--CRLF-->
26: {"area", "HelloWorld"}<!--CRLF-->
27: },
<!--CRLF-->
28: new MvcRouteHandler())<!--CRLF-->
29: }
<!--CRLF-->
30: };
<!--CRLF-->
31: }
<!--CRLF-->
32: }
<!--CRLF-->
33: }
<!--CRLF-->
实际上这个文件Orchard已经创建好了,它在URL和控制器动作之间进行了映射,即将HelloWorld这个URL映射到使用Home控制器和Index动作的HelloWorld这个area上。
4. 创建控制器
在模块根目录下有个Controllers的文件夹(如果没有则创建一个),在这个文件夹中创建HomeController.cs文件,并输入下列内容:
1: using System.Web.Mvc;<!--CRLF-->
2: using Orchard.Themes;<!--CRLF-->
3:
<!--CRLF-->
4: namespace HelloWorld.Controllers {<!--CRLF-->
5: [Themed]
<!--CRLF-->
6: public class HomeController : Controller {<!--CRLF-->
7: public ActionResult Index() {<!--CRLF-->
8: return View("HelloWorld");<!--CRLF-->
9: }
<!--CRLF-->
10: }
<!--CRLF-->
11: }
<!--CRLF-->
12:
<!--CRLF-->
这段代码中,有个ThemedAttribute特性修饰了这个HomeController类,这表示让视图使用当前活动主题。类中的Index方法返回了名为"HelloWorld"的视图,所以后面要创建这个视图。
5. 创建视图
在模块根目录的Views文件夹中创建一个名为Home的子文件夹。在Views/Home文件夹中,创建名为HelloWorld.cshtml的视图文件,并输入以下内容:
<h2>@T("Hello World!")h2><!--CRLF-->
这就是要显示的核心内容,一个二级标题。它会根据当前主题的布局进行显示。
T是一个辅助函数,作用是让这个视图能够被本地化,这不是强制使用的。
6. 更新项目文件
如果上面的工作是在VS2010中做的,那么这一步可以直接跳过了,否则需要打开HelloWorld.csproj文件,添加以下内容,从而能够让上面创建的代码文件能够被动态编译:
<ItemGroup><!--CRLF-->
<Compile Include="Routes.cs"/><!--CRLF-->
<Compile Include="Controllers/HomeController.cs"/><!--CRLF-->
ItemGroup>
<!--CRLF-->
还要添加下面这条,让视图文件也包含在项目中:
<Content Include="Views/HelloWorld.cshtml" /><!--CRLF-->
这样模块就开发好了,下面的工作就是激活这个模块。
7. 激活模块
激活模块有两种方法,一种方法是以管理员身份登录到后台管理面板的Feature页面激活HelloWorld,另一种方法是打开Orchard命令行,输入以下命令:
feature enable HelloWorld
8. 使用模块
现在可以回到前端页面,在地址栏最后加上/HelloWorld,让它看起来像这样:localhost/orchard/HelloWorld (我是在IIS7默认网站下创建的应用程序),然后回车,如果前面的步骤没有错误的话,就会看到页面的内容区域会显示“Hello World”在浏览器上。
这样一个简单的模块就创建完毕并能够使用了。