`
netatomy
  • 浏览: 46824 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

N2CMS Mvc Examples 学习记录 (3) – 控制器类

 
阅读更多

一共有 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共存。

分享到:
评论

相关推荐

    n2cms开源免费

    - **examples**:示例代码或配置文件,帮助开发者理解和学习 N2CMS 的各种功能。 - **lib**:库文件夹,包含了 N2CMS 运行所依赖的外部库和框架。 - **build**:构建相关的文件,如构建脚本或编译配置,用于生成可...

    N2cms内容管理系统

    N2cms内容管理系统是一款强大的开源内容管理平台,其设计目标是提供一个灵活、可扩展的框架,以便用户能够轻松发布各种类型的内容,无论是新闻、博客文章、产品介绍还是其他复杂的信息结构,N2cms都能够应对自如。...

    Ext.NET.MVC.Pro.2.2.0.MVC.Examples.Explorer.zip

    开发者可以查看控制器、视图和模型的实现,了解如何在ASP.NET MVC项目中集成Ext.NET组件,并且学习如何处理各种事件和数据绑定。 5. **Demo**: 示例涵盖了各种Ext.NET MVC控件的用法,如表格(GridPanel)、窗体...

    Ext.NET.MVC.Pro.2.5.1.MVC.Examples.Explorer

    Ext.NET.MVC.Pro.2.5 Examples

    【在线示例源码】FineUIMvc-Examples-v8.2.1.zip

    【在线示例源码】FineUIMvc_Examples_v8.2.1,【在线示例源码】FineUIMvc_Examples_v8.2.1【在线示例源码】FineUIMvc_Examples_v8.2.1,

    Ext.NET.MVC.Pro.2.4.0.MVC.Examples.Explorer

    4. **MVC控制器与视图**:理解MVC模式中的控制器和视图如何与Ext.NET组件交互,示例可能包含自定义的控制器动作来响应客户端请求。 5. **数据库连接**:如果示例涉及到数据库操作,可能需要配置数据库连接字符串,...

    Timer Examples FX2N.zip三菱PLC编程案例源码资料编程控制器应用通讯通信例子程序实例

    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 Examples (Q02H).zip三菱PLC编程案例源码资料编程控制器应用通讯通信例子程序Mitsubishi Timer ...

    asp.net mvc 4 web编程 源代码

    `CodeExamples-Chapter_03`和`CodeExamples-Chapter_06`中的代码可能涉及控制器的实现,包括如何处理GET和POST请求,以及如何返回视图结果或者JSON数据。 视图(View)使用Razor视图引擎,允许开发者用C#语法嵌入在...

    FineUIMvc_v1.1.0_全部资料

    7. **在线示例源代码**:《在线示例源代码》FineUIMvc_Examples_v1.1.0.zip提供了实际运行的示例,通过查看和学习这些代码,开发者可以直观地了解FineUIMvc在实际项目中的应用方式,有助于提升开发效率。 综上所述...

    Telerik Extensions for ASPNET MVC Q1 2010 Source,help,Examples(2010年3月9日的版本)

    【Telerik Extensions for ASP.NET MVC Q1 2010】是Telerik公司推出的一套针对ASP.NET MVC框架的UI扩展库,它包含了丰富的控件集合,为开发人员提供了高效且美观的用户界面元素。该版本发布于2010年3月9日,包含了源...

    MSP430G2xx3_Code_Examples

    总的来说,"MSP430G2xx3 Code Examples"是一个全面的资源库,它涵盖了从基本操作到高级应用的所有关键方面,是学习和开发MSP430G2xx3微控制器的宝贵参考资料。通过深入研究和实践这些例程,开发者能够快速提升其在...

    ext.net mvc

    **标题与描述解析** ...综上所述,这个压缩包提供了使用Ext.NET 2.4框架构建ASP.NET MVC应用所需的关键资源,包括配置示例、版本更新信息、许可协议和开发指南,是开发者学习和应用该框架的重要参考资料。

    ServletExamples JspExamples

    ServletExamples和JspExamples这两个项目名暗示了我们即将探讨的是Java服务器端编程的重要技术——Servlet和JSP(JavaServer Pages)的应用实例。Servlet是Java语言用于扩展Web服务器功能的接口,而JSP则是用于创建...

    ldd3-examples-3.x-master_ldd3-examples-3.x_

    这个压缩包包含了"ldd3-examples-3.x"版本的相关代码和练习,帮助开发者深入学习动态链接器的工作原理。 首先,我们需要了解动态链接器的基础知识。在Linux中,动态链接器通常是ld-linux.so,它是glibc(GNU C ...

    ASP.NET MVC4 Web 编程 源代码

    3. **路由系统**:ASP.NET MVC中的路由规则决定了URL如何映射到控制器方法,开发者可以自定义路由配置以满足不同需求。 4. **控制器(Controller)**:控制器处理用户请求,调用业务逻辑,然后返回视图或者JSON、XML...

    AS3NUI-airkinect-2-examples

    AS3NUI-airkinect-2-examples 是一个专门针对微软Kinect 2.0设备的ActionScript 3(AS3)开发库的应用示例集合。这个库的主要目的是帮助开发者利用AS3语言来与Kinect 2.0进行交互,从而实现各种体感应用和交互式体验...

    Qt编程实例。qt program examples

    4. **模型/视图/控制器(MVC)架构**: Qt支持MVC设计模式,使得数据和界面分离,有利于代码的组织和重用。模型处理数据,视图负责显示,控制器则协调两者交互。 5. **网络编程**: Qt提供了一系列的网络类,如...

    SpringMVC-demo - examples

    `SpringMVC` 遵循 MVC 设计模式,将业务逻辑(Model)、用户界面(View)和控制器(Controller)分离,提高代码的可维护性和可扩展性。控制器接收请求,处理业务逻辑,并将结果传递给视图。 3. **Controller ...

    Servlet,JSP和Spring MVC 初学指南源码

    3. Spring MVC示例:可能涵盖控制器定义、模型绑定、视图解析,以及如何利用Spring的依赖注入(DI)和AOP(面向切面编程)特性。 这些源码实例对于初学者来说是非常宝贵的资源,可以深入理解每个技术的工作原理,...

Global site tag (gtag.js) - Google Analytics