Orchard架构介绍中对Orchard的一些架构内容进行了介绍,下图是Orchard自带的一些模块,

本篇讲解一下如何扩展Orchard来生成我们的第一个模块。

介绍

Orchard构建在ASP.NET MVC之上,MVC是一个应用模式,我在信息系统开发平台OpenExpressApp - Command扩展机制简单介绍了一下。在本篇示例中不包含任何数据,所以我们暂时不用关心model。我们只需要一个controller 和一个view。

在Orchard中Modules能够打包成一个可重用的资产,Modules被实现成一个MVC Areas。在MVC中Areas是一个包含一套独立于其他站点的功能的子站点(sub-sites)。

生成模块目录结构

在生成我们要做的模块示例的文件结构,我们需要先在Orchard的控制台中下载、安装和打开Code Generation 功能,不知道如何下载安装的看看我之前的几篇文档。对于命令行代码生成器的更多内容可以查看Command-line Code Generation.
    一旦我们打开了代码生成功能,我们打开Orchard command-line,打上下面的命令来生成HelloWorld模块:

执行命令后,在Orchard网站的Modules目录下可以看到一个新的HelloWorld目录,在这个目录下可以找到文件module.txt ,按以下内容修改:

View Code

name: HelloWorld

antiforgery: enabled

author: The Orchard Team

website: http://orchardproject.net

version: 0.5.0

orchardversion: 0.5.0

description: The Hello World module is greeting the world and not doing much more.

features:

HelloWorld:

Description: A very simple module.

Category: Sample

这个文件描述当前模块,在功能管理面板可以看到这个信息

注意:使用空格,而不是tab缩进

添加Route

示例将处理网站的相对地址/HelloWorld 。为了定义请求这个URL是要做什么,我们需要在HelloWorld目录下生成文件Routes.cs:

View Code

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())

}

};

}

}

}

一个Route是一个在URL和controller之间的映射,上面的代码是映射/HelloWorld URL到area HelloWorld 的Home controller的Index action

生成Controller

新的模块已经有一个Controllers 目录,下面需要生成HomeController.cs:

View Code

using System.Web.Mvc;

using Orchard.Themes;

namespace HelloWorld.Controllers {

[Themed]

public class HomeController : Controller {

public ActionResult Index() {

return View("HelloWorld");

}

}

}

这个controller处理URL /HelloWorld的请求。在定义Route时我们设置了默认为index的action,代码中Index方法返回HelloWorld视图。

注意在HomeController上的Themed 属性在视图在当前主题下获取皮肤时需要用到。

生成View

在Views目录下,生成一个Home的目录Views\Home,然后添加一个视图文件HelloWorld.cshtml:

<h2>@T("Hello World!")</h2>

注意使用T helper function是希望视图将来支持本地化,这虽然不是强制的,但是是一个好的实践。

添加新的文件到项目中去

上面工作做完之后,剩下的任务就是把这些文件加入HelloWorld.csproj项目文件中进行动态编译了。打开HelloWorld.csproj文件进行编辑:

View Code

<ItemGroup>

<Compile Include="Routes.cs"/>

<Compile Include="Controllers\HomeController.cs"/>

</ItemGroup>

<Content Include="Views\HelloWorld.cshtml" />

激活模块

最后我们需要激活刚加的模块,在命令行下输入以下命令:

我们也可以在后台的【Features】中打开

feature enable HelloWorld

使用Module

我们可以在网站地址之后添加URL /HelloWorld,显示如下界面:

参考: Building a Hello World module

推荐:你可能需要的在线电子书 

我的新浪围脖: http://t.sina.com.cn/openexpressapp

欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]

codegen module HelloWorld

更改清单文件 Manifest

Orchard:如何生成Hello World模块相关推荐

  1. boost python导出c++ map_使用Boost生成的Python模块:与C++签名不匹配

    我正在使用名为Mitsuba的软件.它附带了一个用Boost包装的Python实现. Python中的这一行:使用Boost生成的Python模块:与C++签名不匹配 scene = SceneHan ...

  2. 生成下面的模块时,启用了优化或没有调试信息

    生成下面的模块时,启用了优化或没有调试信息: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\...\xxx ...

  3. APIcoud 手机二维码or条码 生成与扫描模块

    APIcoud 手机二维码or条码 生成与扫描模块 刚接触APIcoud 的时候觉得很多模块真的好难,初次接触二维码的时候觉得,生成二维码真的很费劲呢,其实不然,是真的很难,但是APIcoud 已经封 ...

  4. python生成随机数—random模块

    random 模块包括返回随机数的函数,可以用于模拟或者任何产生随机输出的程序. random.random()    返回随机生成的一个实数,它在[0,1)范围内 random.randint(a, ...

  5. Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解

    1 标准输出 python3利用 print() 来实现标准输出 def print(self, *args, sep=' ', end='\n', file=None): # known speci ...

  6. Orchard之生成新模板

    一:启用 Code Generation 进入后台, Modules –>  Developer Enable 之. 二:生成模版 首先,进入 Orchard 命令行 在 CMD 下到达解决方案 ...

  7. 在Orchard中使用Image Gallery模块

    作为ASP.NET MVC领域一款优秀的开源CMS,Orchard值得所有.NET Web开发人员学习和研究,然后二次开发,最后在其基础上创新.也是遵循国内人员学习IT技术的路线:引进->吸收- ...

  8. Unity 自动化1.0(代码,预制体生成到指定模块)

    代码生成参考的 知乎[Unity]工具类系列教程-- 代码自动化生成! - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/30716595 操作流程: 一,创建 ...

  9. python用turtle输入数字_Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解...

    1 标准输出 python3利用print() 来实现标准输出 def print(self, *args, sep=' ', end='\n', file=None): #known special ...

最新文章

  1. 使用Fair kripke来判断kripke的可达性和可避免性
  2. C语言经典例14-将一个正整数分解质因数
  3. Faster RCNN网络简介
  4. 工程实战-ES6环境配置
  5. 关于Linq to DataSet
  6. 谷歌大神Jeff Dean领衔,万字展望5大AI趋势
  7. 需要编写支持英特尔 x86 的 Android* 游戏应用? 此处的样本可为您提供帮助!
  8. 计算机代码大全喜欢你,微信示爱代码大全 七夕情人节微信翻译表白代码2021
  9. json类型大小 mysql_MySQL数据类型 - JSON数据类型 (1)
  10. 160个破解练习之CrackMe 006
  11. Shufflenet解读
  12. 计算机网络——集线器与交换机
  13. 使用Netflix Archaius进行配置管理
  14. 【MM采购定价】怎么样实现创建采购订单的时候,采购价格不可以更改?
  15. 多层板的板层布局和线宽的设置(记录)
  16. WiFi广告路由器的利与弊
  17. zte android截屏快捷键,中兴红牛V5手机怎么截屏 中兴红牛V5截图技巧图解
  18. HTML设置网站标题前的logo
  19. Dell 灵越7370 装机过程遇到硬盘枷锁 bitlocker锁解决方法
  20. FF新推荐弹窗怎么彻底让他爬

热门文章

  1. 关于object references an unsaved transient instance - save the transient instance before flushing的解决方法
  2. python合并k个有序链表_Leetcode合并K个升序链表(Python版本),LeetCode,python
  3. 【二级java】操作题知识点积累
  4. 第8章系统服务(简易音频播放器的实现)
  5. Java开发买低压本还是标压本_标压和低压,笔记本怎么选才最香?
  6. python银行家算法代码_避免死锁的银行家算法C++程序实现
  7. 【Ant Design Pro 四】react 点击事件传参
  8. APP程序内部打开某个APP的AppStore页面
  9. Memcached, Redis, MongoDB区别
  10. 图解c/c++多级指针与“多维”数组