一共有 5 个控制器。
1. ContentCotroller
1: [Controls(typeof(AbstractPage))]
<!--CRLF-->
2: public class ContentController : ContentController
<!--CRLF-->
3: {
<!--CRLF-->
4: }
<!--CRLF-->
Controls特性指定控制器要使用哪种类型的内容项(模型),这里指定的是AbstractPage,而不是ContentPage,说明它可以使用任何一种内容项,不过有些内容项已经有对应的控制器了,只有没有对应控制器的内容项才会被这个控制器使用。
另外可以看出,控制器的父类被指定为ContentController,这是N2中定义的控制器类,这个类中实现了Index方法(虚拟方法),对于普通内容项已经够用,所以这里不需要重写了。
2. NewsController
1: [Controls(typeof(NewsPage))]
<!--CRLF-->
2: public class NewsController : ContentController
<!--CRLF-->
3: {
<!--CRLF-->
4: public override ActionResult Index()
<!--CRLF-->
5: {
<!--CRLF-->
6: var vd = new NewsViewData
<!--CRLF-->
7: {
<!--CRLF-->
8: News = CurrentItem,
<!--CRLF-->
9: Back = CurrentItem.Parent,
<!--CRLF-->
10: Comments = CurrentItem.GetComments()
<!--CRLF-->
11: };
<!--CRLF-->
12: return View("index", vd);
<!--CRLF-->
13: }
<!--CRLF-->
14:
<!--CRLF-->
15: public ActionResult Comment()
<!--CRLF-->
16: {
<!--CRLF-->
17: return View("Comment", CurrentItem);
<!--CRLF-->
18: }
<!--CRLF-->
19:
<!--CRLF-->
20: public ActionResult Submit(string title, string text)
<!--CRLF-->
21: {
<!--CRLF-->
22: CommentItem comment = Engine.Definitions.CreateInstance(CurrentItem);
<!--CRLF-->
23: comment.Title = Server.HtmlEncode(title);
<!--CRLF-->
24: comment.Text = Server.HtmlEncode(text);
<!--CRLF-->
25: Engine.Persister.Save(comment);
<!--CRLF-->
26:
<!--CRLF-->
27: return RedirectToAction("index");
<!--CRLF-->
28: }
<!--CRLF-->
29: }
<!--CRLF-->
它控制新闻内容及其评论内容的所有请求和处理,包括获取某条新闻及其对它的所有评论、显示添加评论表单和提交评论。注意这里用到了NewsViewData类,这是视图数据类,它提供了新闻所需要的包括自己在内的必要信息,这个类在下篇中会看到代码。
Index方法在这里重写了,因为显示新闻内容的时候,还需要显示针对此新闻的所有评论和其他的一些辅助内容,比如后退到哪里,所以另外定义了专门的NewsViewData类来存储这些数据,并绑定到视图中。
Comment方法响应GET请求,它把添加评论的视图返回到浏览器让用户能够输入评论。
Submit方法响应POST请求,它负责创建一条评论对象并持久化。Engine.Definitions.CreateInstance(CurrentItem)的作用是在当前新闻内容项的子结点中添加一个评论项对象,设置了标题和文本之后,通过Engine.Persister.Save()方法把这个评论持久化到数据源中。最后回到新闻页面。
这里需要好好研究Engine对象,它提供了许多管理N2所必需的功能,如果以后要深度定制CMS的话,肯定会用的到。
3. NewsContainerController
1: [Controls(typeof(NewsContainer))]
<!--CRLF-->
2: public class NewsContainerController : ContentController
<!--CRLF-->
3: {
<!--CRLF-->
4: public override ActionResult Index()
<!--CRLF-->
5: {
<!--CRLF-->
6: return View("Index", new NewsContainerViewData { Container = CurrentItem, News = CurrentItem.GetNews()});
<!--CRLF-->
7: }
<!--CRLF-->
8:
<!--CRLF-->
9: public ActionResult JsonList()
<!--CRLF-->
10: {
<!--CRLF-->
11: var news = CurrentItem.GetNews().Select(n => new { n.Title, n.Url });
<!--CRLF-->
12: return Json(news);
<!--CRLF-->
13: }
<!--CRLF-->
14: }
<!--CRLF-->
这个控制器的作用就是获取所有的新闻,然后传给新闻容器视图。这里也用到了视图数据类,NewsContainerViewData,它存储了新闻容器项和所有的新闻列表。
这里还定义了一个JsonList方法,返回JSON格式的新闻列表,不知道会在哪里用到。
4. TextPartController
1: [Controls(typeof(Models.TextPart))]
<!--CRLF-->
2: public class TextPartController : ContentController
<!--CRLF-->
3: {
<!--CRLF-->
4: public override ActionResult Index()
<!--CRLF-->
5: {
<!--CRLF-->
6: return View(CurrentItem);
<!--CRLF-->
7: }
<!--CRLF-->
8: }
<!--CRLF-->
这里没有什么好说的,我感觉Index没有必要重写,因为父类的Index方法就是这样写的。
5. StaticController
代码不需要贴了,这个类没有用到N2的任何代码,似乎就是用VS新建的MVC项目中的HomeController改的。它不受N2的任何控制,也不会在N2的管理界面中出现,不过它可以和N2共存。
分享到:
相关推荐
- **examples**:示例代码或配置文件,帮助开发者理解和学习 N2CMS 的各种功能。 - **lib**:库文件夹,包含了 N2CMS 运行所依赖的外部库和框架。 - **build**:构建相关的文件,如构建脚本或编译配置,用于生成可...
N2cms内容管理系统是一款强大的开源内容管理平台,其设计目标是提供一个灵活、可扩展的框架,以便用户能够轻松发布各种类型的内容,无论是新闻、博客文章、产品介绍还是其他复杂的信息结构,N2cms都能够应对自如。...
开发者可以查看控制器、视图和模型的实现,了解如何在ASP.NET MVC项目中集成Ext.NET组件,并且学习如何处理各种事件和数据绑定。 5. **Demo**: 示例涵盖了各种Ext.NET MVC控件的用法,如表格(GridPanel)、窗体...
Ext.NET.MVC.Pro.2.5 Examples
【在线示例源码】FineUIMvc_Examples_v8.2.1,【在线示例源码】FineUIMvc_Examples_v8.2.1【在线示例源码】FineUIMvc_Examples_v8.2.1,
4. **MVC控制器与视图**:理解MVC模式中的控制器和视图如何与Ext.NET组件交互,示例可能包含自定义的控制器动作来响应客户端请求。 5. **数据库连接**:如果示例涉及到数据库操作,可能需要配置数据库连接字符串,...
Timer Examples FX2N.zip三菱PLC编程案例源码资料编程控制器应用通讯通信例子程序实例Timer Examples FX2N.zip三菱PLC编程案例源码资料编程控制器应用通讯通信例子程序实例Timer Examples FX2N.zip三菱PLC编程案例...
Mitsubishi Timer Examples (Q02H).zip三菱PLC编程案例源码资料编程控制器应用通讯通信例子程序Mitsubishi Timer Examples (Q02H).zip三菱PLC编程案例源码资料编程控制器应用通讯通信例子程序Mitsubishi Timer ...
`CodeExamples-Chapter_03`和`CodeExamples-Chapter_06`中的代码可能涉及控制器的实现,包括如何处理GET和POST请求,以及如何返回视图结果或者JSON数据。 视图(View)使用Razor视图引擎,允许开发者用C#语法嵌入在...
7. **在线示例源代码**:《在线示例源代码》FineUIMvc_Examples_v1.1.0.zip提供了实际运行的示例,通过查看和学习这些代码,开发者可以直观地了解FineUIMvc在实际项目中的应用方式,有助于提升开发效率。 综上所述...
【Telerik Extensions for ASP.NET MVC Q1 2010】是Telerik公司推出的一套针对ASP.NET MVC框架的UI扩展库,它包含了丰富的控件集合,为开发人员提供了高效且美观的用户界面元素。该版本发布于2010年3月9日,包含了源...
总的来说,"MSP430G2xx3 Code Examples"是一个全面的资源库,它涵盖了从基本操作到高级应用的所有关键方面,是学习和开发MSP430G2xx3微控制器的宝贵参考资料。通过深入研究和实践这些例程,开发者能够快速提升其在...
**标题与描述解析** ...综上所述,这个压缩包提供了使用Ext.NET 2.4框架构建ASP.NET MVC应用所需的关键资源,包括配置示例、版本更新信息、许可协议和开发指南,是开发者学习和应用该框架的重要参考资料。
ServletExamples和JspExamples这两个项目名暗示了我们即将探讨的是Java服务器端编程的重要技术——Servlet和JSP(JavaServer Pages)的应用实例。Servlet是Java语言用于扩展Web服务器功能的接口,而JSP则是用于创建...
这个压缩包包含了"ldd3-examples-3.x"版本的相关代码和练习,帮助开发者深入学习动态链接器的工作原理。 首先,我们需要了解动态链接器的基础知识。在Linux中,动态链接器通常是ld-linux.so,它是glibc(GNU C ...
3. **路由系统**:ASP.NET MVC中的路由规则决定了URL如何映射到控制器方法,开发者可以自定义路由配置以满足不同需求。 4. **控制器(Controller)**:控制器处理用户请求,调用业务逻辑,然后返回视图或者JSON、XML...
AS3NUI-airkinect-2-examples 是一个专门针对微软Kinect 2.0设备的ActionScript 3(AS3)开发库的应用示例集合。这个库的主要目的是帮助开发者利用AS3语言来与Kinect 2.0进行交互,从而实现各种体感应用和交互式体验...
4. **模型/视图/控制器(MVC)架构**: Qt支持MVC设计模式,使得数据和界面分离,有利于代码的组织和重用。模型处理数据,视图负责显示,控制器则协调两者交互。 5. **网络编程**: Qt提供了一系列的网络类,如...
`SpringMVC` 遵循 MVC 设计模式,将业务逻辑(Model)、用户界面(View)和控制器(Controller)分离,提高代码的可维护性和可扩展性。控制器接收请求,处理业务逻辑,并将结果传递给视图。 3. **Controller ...
3. Spring MVC示例:可能涵盖控制器定义、模型绑定、视图解析,以及如何利用Spring的依赖注入(DI)和AOP(面向切面编程)特性。 这些源码实例对于初学者来说是非常宝贵的资源,可以深入理解每个技术的工作原理,...