本文是阅读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;
2: using System.Web.Mvc;
3: using System.Web.Routing;
4: using Orchard.Mvc.Routes;
5:
6: namespace HelloWorld {
7: public class Routes : IRouteProvider {
8: public void GetRoutes(ICollection routes) {
9: foreach (var routeDescriptor in GetRoutes())
10: routes.Add(routeDescriptor);
11: }
12:
13: public IEnumerable GetRoutes() {
14: return new[] {
15: new RouteDescriptor {
16: Priority = 5,
17: Route = new Route(
18: "HelloWorld",
19: new RouteValueDictionary {
20: {"area", "HelloWorld"},
21: {"controller", "Home"},
22: {"action", "Index"}
23: },
24: new RouteValueDictionary(),
25: new RouteValueDictionary {
26: {"area", "HelloWorld"}
27: },
28: new MvcRouteHandler())
29: }
30: };
31: }
32: }
33: }
实际上这个文件Orchard已经创建好了,它在URL和控制器动作之间进行了映射,即将HelloWorld这个URL映射到使用Home控制器和Index动作的HelloWorld这个area上。
4. 创建控制器
在模块根目录下有个Controllers的文件夹(如果没有则创建一个),在这个文件夹中创建HomeController.cs文件,并输入下列内容:
1: using System.Web.Mvc;
2: using Orchard.Themes;
3:
4: namespace HelloWorld.Controllers {
5: [Themed]
6: public class HomeController : Controller {
7: public ActionResult Index() {
8: return View("HelloWorld");
9: }
10: }
11: }
12:
这段代码中,有个ThemedAttribute特性修饰了这个HomeController类,这表示让视图使用当前活动主题。类中的Index方法返回了名为"HelloWorld"的视图,所以后面要创建这个视图。
5. 创建视图
在模块根目录的Views文件夹中创建一个名为Home的子文件夹。在Views/Home文件夹中,创建名为HelloWorld.cshtml的视图文件,并输入以下内容:
<h2>@T("Hello World!")h2>
这就是要显示的核心内容,一个二级标题。它会根据当前主题的布局进行显示。
T是一个辅助函数,作用是让这个视图能够被本地化,这不是强制使用的。
6. 更新项目文件
如果上面的工作是在VS2010中做的,那么这一步可以直接跳过了,否则需要打开HelloWorld.csproj文件,添加以下内容,从而能够让上面创建的代码文件能够被动态编译:
<ItemGroup>
<Compile Include="Routes.cs"/>
<Compile Include="Controllers/HomeController.cs"/>
ItemGroup>
还要添加下面这条,让视图文件也包含在项目中:
<Content Include="Views/HelloWorld.cshtml" />
这样模块就开发好了,下面的工作就是激活这个模块。
7. 激活模块
激活模块有两种方法,一种方法是以管理员身份登录到后台管理面板的Feature页面激活HelloWorld,另一种方法是打开Orchard命令行,输入以下命令:
feature enable HelloWorld
8. 使用模块
现在可以回到前端页面,在地址栏最后加上/HelloWorld,让它看起来像这样:localhost/orchard/HelloWorld (我是在IIS7默认网站下创建的应用程序),然后回车,如果前面的步骤没有错误的话,就会看到页面的内容区域会显示“Hello World”在浏览器上。
这样一个简单的模块就创建完毕并能够使用了。