N2CMS Mvc Examples 学习记录 (3) – 控制器类
来源:互联网 发布:海南话翻译软件 编辑:程序博客网 时间:2024/06/06 20:20
一共有 5 个控制器。
1. ContentCotroller
1: [Controls(typeof(AbstractPage))]
2: public class ContentController : ContentController
3: {
4: }
Controls特性指定控制器要使用哪种类型的内容项(模型),这里指定的是AbstractPage,而不是ContentPage,说明它可以使用任何一种内容项,不过有些内容项已经有对应的控制器了,只有没有对应控制器的内容项才会被这个控制器使用。
另外可以看出,控制器的父类被指定为ContentController,这是N2中定义的控制器类,这个类中实现了Index方法(虚拟方法),对于普通内容项已经够用,所以这里不需要重写了。
2. NewsController
1: [Controls(typeof(NewsPage))]
2: public class NewsController : ContentController
3: {
4: public override ActionResult Index()
5: {
6: var vd = new NewsViewData
7: {
8: News = CurrentItem,
9: Back = CurrentItem.Parent,
10: Comments = CurrentItem.GetComments()
11: };
12: return View("index", vd);
13: }
14:
15: public ActionResult Comment()
16: {
17: return View("Comment", CurrentItem);
18: }
19:
20: public ActionResult Submit(string title, string text)
21: {
22: CommentItem comment = Engine.Definitions.CreateInstance(CurrentItem);
23: comment.Title = Server.HtmlEncode(title);
24: comment.Text = Server.HtmlEncode(text);
25: Engine.Persister.Save(comment);
26:
27: return RedirectToAction("index");
28: }
29: }
它控制新闻内容及其评论内容的所有请求和处理,包括获取某条新闻及其对它的所有评论、显示添加评论表单和提交评论。注意这里用到了NewsViewData类,这是视图数据类,它提供了新闻所需要的包括自己在内的必要信息,这个类在下篇中会看到代码。
Index方法在这里重写了,因为显示新闻内容的时候,还需要显示针对此新闻的所有评论和其他的一些辅助内容,比如后退到哪里,所以另外定义了专门的NewsViewData类来存储这些数据,并绑定到视图中。
Comment方法响应GET请求,它把添加评论的视图返回到浏览器让用户能够输入评论。
Submit方法响应POST请求,它负责创建一条评论对象并持久化。Engine.Definitions.CreateInstance(CurrentItem)的作用是在当前新闻内容项的子结点中添加一个评论项对象,设置了标题和文本之后,通过Engine.Persister.Save()方法把这个评论持久化到数据源中。最后回到新闻页面。
这里需要好好研究Engine对象,它提供了许多管理N2所必需的功能,如果以后要深度定制CMS的话,肯定会用的到。
3. NewsContainerController
1: [Controls(typeof(NewsContainer))]
2: public class NewsContainerController : ContentController
3: {
4: public override ActionResult Index()
5: {
6: return View("Index", new NewsContainerViewData { Container = CurrentItem, News = CurrentItem.GetNews()});
7: }
8:
9: public ActionResult JsonList()
10: {
11: var news = CurrentItem.GetNews().Select(n => new { n.Title, n.Url });
12: return Json(news);
13: }
14: }
这个控制器的作用就是获取所有的新闻,然后传给新闻容器视图。这里也用到了视图数据类,NewsContainerViewData,它存储了新闻容器项和所有的新闻列表。
这里还定义了一个JsonList方法,返回JSON格式的新闻列表,不知道会在哪里用到。
4. TextPartController
1: [Controls(typeof(Models.TextPart))]
2: public class TextPartController : ContentController
3: {
4: public override ActionResult Index()
5: {
6: return View(CurrentItem);
7: }
8: }
这里没有什么好说的,我感觉Index没有必要重写,因为父类的Index方法就是这样写的。
5. StaticController
代码不需要贴了,这个类没有用到N2的任何代码,似乎就是用VS新建的MVC项目中的HomeController改的。它不受N2的任何控制,也不会在N2的管理界面中出现,不过它可以和N2共存。
- N2CMS Mvc Examples 学习记录 (3) – 控制器类
- N2CMS Mvc Examples 学习记录 (2) – 模型类
- N2CMS Mvc Examples 学习记录 (1) – 整体解析
- N2CMS Mvc Examples 学习记录 (4) – 母版页和视图
- Spring MVC学习(四)-------Controller接口控制器详解3
- Spring MVC学习(六)-------注解式控制器详解3
- Spring MVC学习(四)-------Controller接口控制器详解3
- Spring MVC学习(六)-------注解式控制器详解3
- Git版本控制器学习记录
- 码农小汪-Spring-MVC-控制器3
- Spring MVC学习------------多视图控制器
- spark学习3之examples中的SparkPi
- .net MVC学习记录--1.MVC简介
- 第六章、SpringMVC学习-注解式控制器详解(3)-Spring MVC 3 生产者、消费者请求限定
- N2CMS 实践之路 Part.3 第一个页
- N2CMS 实践之路 Tip.3 自定义控件如何添加
- MVC 从控制器传值到控制器
- 洗心革面 重新学习JSP! ----之三:MVC的控制器
- C51中interrupt和using的用法——单片机
- Java读写修改Property文件
- break和continue的区别
- 人工智能的发现
- iOS4.0开发——Modal a Controller的不同呈现类型modalPresentationStyle
- N2CMS Mvc Examples 学习记录 (3) – 控制器类
- Qt Model/View 学习笔记 (四)
- 解决乱码的最佳实践
- Qt登录窗口的退出逻辑
- 跑归并排序 (并行)
- 普通表索引,分区表局部索引和分区表的全局索引分区的效率对比测试
- 使用Qt编辑关闭窗口程序的一些见解
- android 监听联系人数据库
- 为结构体中的CString成员赋值出错的问题