上一篇 中,我们已经新建了 Orchard.News 模块,并且我对一个典型的 Orchard 模块的结构作了概要式的介绍,相信您对模块的构成已经有了初步的了解。
此篇将继续上一篇的话题讲解,如果您还没有按照之前的步骤配置好 Orchard 开发环境并新建 Orchard.News 示例模块,请您先转到前两篇阅读相关内容并按照文章里的叙述着手准备工作。

Orchard 模块:基于 ASP.NET MVC 结构

请在开始 Orchard 模块开发之前,最好对 ASP.NET MVC 的基础理论作初步的了解。

原本计划在本篇介绍 ASP.NET MVC 的一些基础知识,毕竟 Orchard 模块是基于典型的 MVC 项目的形式的。不过我想,您可以众多其他在线资料中找到足够有用的信息。

我仅翻译来自 Orchard 项目网站上在讲到 Hello World 模块前面的一段叙述作为引述的前言,仅供抛砖引玉,更详细的 ASP.NET MVC 开发基础知识,还需要您自己完善。

Orchard 是基于 ASP.NET MVC 构建的,这意味着如果您熟悉这个框架,你将会感到更顺利。如果还不熟悉,也不需要担心,我们将解释必要的知识。

MVC 是一种将逻辑分离的模式:用于组织数据的模型(Model,M),用于协调 UI 并决定如何操作模型的控制器(Controller,C)和仅用于负责显示由控制器处理的结果的视图(View,V)。

在我们的 Orchard.News 示例模块中,我们不会涉及到数据,所以我们不需要为模型(Model)担心。我们只需要创建一个控制器(Controller)和一个视图(View)。一个模块的其余所有的部分,其作用将是用来向 Orchard 声明我们如何与它一起工作。我们将会在创建模块时继续回到这些概念上来。(此两句指代我在上一篇博客中已经讲到的一个模块中的其他部分。——ciznx 注

 

Orchard.News 控制器 NewsItemController

新闻模块将用来显示新闻条目,所以我们创建用于协调和处理新闻条目的控制器 NewsItemController,根据 MVC 的约定,控制器中的默认 Action 的名称为 Index,当我们在浏览器中输入这个控制器的URL时,如果没有指定具体的 Action,那系统将默认使用 Index。所以,我们新在刚刚创建的控制器中创建 Index 的 Action。

using System.Web.Mvc; using Orchard.Themes;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<span style="color: blue">namespace </span>Orchard.News.Controllers
{
    [<span style="color: #2b91af">Themed</span>]
    <span style="color: blue">public class </span><span style="color: #2b91af">NewsItemController</span>: <span style="color: #2b91af">Controller
    </span>{

        <span style="color: blue">public </span><span style="color: #2b91af">ActionResult </span>Index() {
            <span style="color: blue">return </span>View();
        }
    }
}

可以看到,在上述代码中,我为这个控制器标注了一个 Theme 的特性,这样,通过我们的控制器显示的视图就可以在 Orchard 主题引擎的“照顾”下也有了主题。
最上面的两行 using 是为了能够让 C# 编译器找到我们所需要的 Controller 和 Themed 两个类所在位置。

 

第一个 Orchard.News 视图(View)

要将执行结果显示到浏览器的页面上,我们需要创建一个视图。image

根据 ASP.NET MVC 的约定,在 Views 目录下新建与控制器名称(在本例中是 NewsItem)相同的文件夹,并在该文件夹下新建与 Action 名称相同的视图文件,将自动对应到相应的 Action。

因此,我们在 Views 目录新建 NewsItem 文件夹,并建立 Index.cshtml 的视图文件与 Action 对应。

最终文件夹结构如右图所示。

并在新建的 Index.cshtml 中输入我们要显示的内容:

 

<h2>你好,Orchard.News 模块</h2> <div> (Orchard.News 讯)ciznx 已于 2012/9/23 创建了新的 Orchard.News 模块。 </div>

这样,我们的视图就完成了。可以看出来,上面的代码就是一小段 HTML 文档片断。正是如image此,它将被作为我们自己的模块的输出显示到浏览器中。

到这里,我们模块的第一个功能也就成功地完成了。也就是说,它已经可以运行了!
打开浏览器,进入我们已经配置好的 Orchard 网站管理面板,点到 Modules,并启用我们新创建的 Orchard.News 模块。

不出意外的话,您应该可以看到如右图所示的启用成功的提示。
嗯,如果出了意外,请您在文后评论区留言,希望我可以帮助您解决您遇到的意外问题。

 

打开您的浏览器!查看 Orchard.News 新报道

是的,一篇来自 Orchard.News 的最新报道将可以显示在我们的 Orchard 网站上,在之前 Orchard 从来没有新闻报道的能力,而现在它有了。

在浏览器里输入以下 URL:

http://orchard.local15/News/NewsItem/Index

几秒之后,您将可以看到浏览器正文区出现了我们刚刚制作的视图。

image

如果,你收到“Page not found” 的错误提示,可能有三个原因:

  1. URL 输入错误,请再检查一遍;
  2. 没有在管理面板启用我们的 Orchard.News 模块,请启用;
  3. 可能 Orchard 没有正确地完成新模块的编译生成工作,尝试回到 Visual Studio,在 Orchard.News 模块项目上右击鼠标,选择“生成”以手动生成项目。

完成这三步检查和修复措施后,您应该可以在浏览器里看到我们的成果了。
同样,如果还是出现了意外,仍请您在评论区描述您的问题,我将努力提供帮助。

 

Orchard.News 模块初步总结

在本文中,我们为之前新建的 Orchard.News 模块添加一个控制器,在控制器中新建了一个 Action,并在 Views 中添加了对应的一个视图,都只简单的几行代码,它完成了示例页面的输出,而且如果您尝试切换 Orchard 主题,您发现我们新页面会适配新的主题。

在后面,我们将逐步完善这个新建的模块,添加更多功能,以便一步步深入 Orchard 模块开发的各个角落。
在本文中,您可能遇到一些疑惑,比如:

  • 如何显示更动态的内容?比如从管理面板中添加新闻并自动显示到站点前台?
  • 如果定制新闻条目的显示细节,例如显示作者或来源?
  • Themed 是如何应用的?为什么 Index.cshtml 中简短的片断却可以输入一整个页面?

随着我们讨论的深入,您将渐渐了解这些方方面面的知识。