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

N2CMS Mvc Examples 学习记录 (2) – 模型类

 
阅读更多

研究一下模型类,总共有6个类,它们都表示所包含的内容。

1. AbstractPage

   1: [WithEditableTitle, WithEditableName]
<!--CRLF-->
   2: public abstract class AbstractPage : ContentItem, INode
<!--CRLF-->
   3: {
<!--CRLF-->
   4:     public string PreviewUrl
<!--CRLF-->
   5:     {
<!--CRLF-->
   6:         get { return Url; }
<!--CRLF-->
   7:     }
<!--CRLF-->
   8: }
<!--CRLF-->

这个抽象类代表所有将以页面显示的内容项。WithEditableTitle特性让此类的Title属性可被编辑,WithEditableName让此类的Name属性可被编辑。定义的只读属性PreviewUrl,直接返回Url值,似乎没有什么用。

2. ContentPage

   1: [Definition("Content Page", Installer = N2.Installation.InstallerHint.PreferredStartPage)]
<!--CRLF-->
   2: public class ContentPage : AbstractPage
<!--CRLF-->
   3: {
<!--CRLF-->
   4:     [EditableFreeTextArea("Text", 100)]
<!--CRLF-->
   5:     public virtual string Text
<!--CRLF-->
   6:     {
<!--CRLF-->
   7:         get { return (string)(GetDetail("Text") ?? string.Empty); }
<!--CRLF-->
   8:         set { SetDetail("Text", value, string.Empty); }
<!--CRLF-->
   9:     }
<!--CRLF-->
  10: }
<!--CRLF-->

这个类表示有文字内容的内容项,也就是它拥有内容了,这是通过虚拟的Text属性来进行获取和设置的。Definition特性用于为ContentPage指定一些特殊的设置,第一个参数是它的标题(显示在N2管理界面中,当新建和编辑页面的时候可以看到),第二个是设置属性Installer,它让N2在安装此网站时能让ContentPage也作为起始页进行选择(在安装的第2步可以看到)。最好不要用这个特性,而是用更准确的PageDefinition代替。ContentPage类定义的Text属性上的EditableFreeTextArea特性是表示Text属性将可以被N2用一个富文本编辑器编辑,get和set方法其实可以写的更省一些。

3. NewsPage

   1: [Definition("News")]
<!--CRLF-->
   2: [RestrictParents(typeof(NewsContainer))]
<!--CRLF-->
   3: public class NewsPage : AbstractPage
<!--CRLF-->
   4: {
<!--CRLF-->
   5:     public NewsPage()
<!--CRLF-->
   6:     {
<!--CRLF-->
   7:         Visible = false;
<!--CRLF-->
   8:     }
<!--CRLF-->
   9: 
<!--CRLF-->
  10:     [EditableFreeTextArea("Text", 100)]
<!--CRLF-->
  11:     public virtual string Text
<!--CRLF-->
  12:     {
<!--CRLF-->
  13:         get { return (string)(GetDetail("Text") ?? string.Empty); }
<!--CRLF-->
  14:         set { SetDetail("Text", value, string.Empty); }
<!--CRLF-->
  15:     }
<!--CRLF-->
  16: 
<!--CRLF-->
  17:     public virtual IEnumerable GetComments()
<!--CRLF-->
  18:     {
<!--CRLF-->
  19:         foreach (ContentItem item in GetChildren())
<!--CRLF-->
  20:         {
<!--CRLF-->
  21:             if (item is CommentItem)
<!--CRLF-->
  22:             {
<!--CRLF-->
  23:                 yield return item as CommentItem;
<!--CRLF-->
  24:             }
<!--CRLF-->
  25:         }
<!--CRLF-->
  26:     }
<!--CRLF-->
  27: }
<!--CRLF-->

NewsPage表示新闻内容,而且它通过RestrictParents限制其父结点只能是NewsContainer类。它的构造函数中把Visible属性设置为false,查看文档知道这可以让新闻页面不显示在站点地图中,当然也可以让它不显示在导航中。另外新闻可以有评论,所以GetComments方法返回所有评论,这也说明NewsPage是评论的父结点。

4. NewsContainer

   1: [Definition("News Collection")]
<!--CRLF-->
   2: public class NewsContainer : AbstractPage
<!--CRLF-->
   3: {
<!--CRLF-->
   4:     public virtual IEnumerable GetNews()
<!--CRLF-->
   5:     {
<!--CRLF-->
   6:         return GetChildren(new AccessFilter(), new TypeFilter(typeof (NewsPage))).Cast();
<!--CRLF-->
   7:     }
<!--CRLF-->
   8: }
<!--CRLF-->

新闻容器类,它的作用就是列出所有的新闻,这个工作由GetNews方法来实现。

5. CommentItem

   1: [Definition("Comment")]
<!--CRLF-->
   2: [RestrictParents(typeof(NewsPage))]
<!--CRLF-->
   3: public class CommentItem : AbstractPage
<!--CRLF-->
   4: {
<!--CRLF-->
   5:     public override bool IsPage
<!--CRLF-->
   6:     {
<!--CRLF-->
   7:         get { return false; }
<!--CRLF-->
   8:     }
<!--CRLF-->
   9: 
<!--CRLF-->
  10:     public override string IconUrl
<!--CRLF-->
  11:     {
<!--CRLF-->
  12:         get { return "~/Content/comment.png"; }
<!--CRLF-->
  13:     }
<!--CRLF-->
  14: 
<!--CRLF-->
  15:     [EditableFreeTextArea("Text", 100)]
<!--CRLF-->
  16:     public virtual string Text
<!--CRLF-->
  17:     {
<!--CRLF-->
  18:         get { return (string)(GetDetail("Text") ?? string.Empty); }
<!--CRLF-->
  19:         set { SetDetail("Text", value, string.Empty); }
<!--CRLF-->
  20:     }
<!--CRLF-->
  21: }
<!--CRLF-->

表示新闻的评论,所以有RestrictParents特性进行约束。另外有趣的是因为它不应该显示到单独的页面中,所以重写了IsPage属性,让其总是返回false。其他的属性就不用解释了。

6. TextPart

   1: [PartDefinition("TextPart")]
<!--CRLF-->
   2: public class TextPart : ContentItem
<!--CRLF-->
   3: {
<!--CRLF-->
   4:     [EditableFreeTextArea("Text", 100)]
<!--CRLF-->
   5:     public virtual string Text
<!--CRLF-->
   6:     {
<!--CRLF-->
   7:         get { return (string)(GetDetail("Text") ?? string.Empty); }
<!--CRLF-->
   8:         set { SetDetail("Text", value, string.Empty); }
<!--CRLF-->
   9:     }
<!--CRLF-->
  10: }
<!--CRLF-->

这个类不是从抽象的AbstractPage派生的,而是直接派生自ContentItem类,而且使用了PartDefinition特性进行修饰,这种模型对象通常会通过ASCX模板进行呈现,而不是页面模板(ASPX),说明它应该显示在页面中的某个部位,类似于WebForm中的用户控件,这样可以在不同的页面中重用。具体使用还没有研究过。

分享到:
评论

相关推荐

    n2cms开源免费

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

    N2cms内容管理系统

    4. docs:该目录可能包含了项目的文档,包括用户手册、API参考、教程等,是学习和理解N2cms功能的重要资源。 5. examples:这里可能存放了一些示例或者模板,帮助用户了解如何使用N2cms来创建和管理内容,或者如何...

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

    Ext.NET.MVC.Pro.2.2.0.MVC.Examples.Explorer.zip 是一个包含Ext.NET MVC专业版2.2.0的示例集合,专为ASP.NET MVC开发者设计。这个压缩包提供了丰富的控件演示,帮助用户理解并掌握如何在实际项目中应用这些功能...

    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

    Ext.NET.MVC.Pro.2.4.0.MVC.Explorer 是一个基于Ext.NET MVC框架的示例项目,用于展示在ASP.NET MVC环境中如何使用Ext.NET库进行富客户端应用开发。Ext.NET是一个强大的JavaScript库,它提供了丰富的用户界面组件,...

    Kinect v2 Examples with MS-SDK 2.21.unitypackage && KinectV2-Sam

    总的来说,"Kinect v2 Examples with MS-SDK 2.21.unitypackage && KinectV2_Sample"提供了丰富的学习材料,可以帮助开发者充分利用Kinect v2的潜力,创造出富有创新和沉浸感的交互体验。无论是游戏设计、教育应用...

    Kinect v2 Examples with MS-SDK v2.13 with SDK2.unitypackage

    This is a set of Kinect-v2 (aka ‘Kinect for Xbox One’) examples that use several major scripts, grouped in one folder. The package contains over thirty demo scenes. Apart of Kinect-v2 and v1 ...

    Kinect v2 Examples with MS-SDK 2.21

    Kinect v2 Examples with MS-SDK 2.21

    FineUIMvc_v1.1.0_全部资料

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

    ext.net mvc

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

    tensorflow中examples文件下载

    在TensorFlow库中,"examples"目录通常包含各种教程和示例代码,帮助初学者和开发者更好地理解和使用这个强大的深度学习框架。当你遇到"No module named ‘tensorflow.examples.tutorials’"的错误时,这意味着你的...

    Kinect v2 Examples with MS-SDK 2.22

    Kinect v2 Examples with MS-SDK 2.22 适用于unity开发中的kinect2的sdk,包含了部分demo场景

    Kinect v2 Examples with MS-SDK

    Kinect v2 Examples with MS-SDK 用于开发Kinect的例子

    ServletExamples JspExamples

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

    asp.net mvc 4 web编程 源代码

    总之,这些代码示例涵盖了ASP.NET MVC 4开发的多个方面,从基本的MVC架构理解到高级特性的应用,为深入学习和实践提供了丰富的资源。通过研究这些章节,读者可以逐步掌握如何构建高效、可维护的Web应用程序。

    asp.net mvc

    Note Because Visual Studio 2008 and Visual Studio 2010 Beta 2 share a component of ASP.NET MVC 2, installing the ASP.NET MVC 2 Release Candidate release on a computer where Visual Studio 2010 ...

    Kinect v2 Examples with MS-SDK 2.16

    Kinect v2 Examples with MS-SDK 2.16.2 所支持的Unity版本:2017.1.0 及以上版本 请勿用于任何商业用途,请前往unity官网支持正版! This is a set of Kinect-v2 (aka ‘Kinect for Xbox One’) examples that use...

    AS3NUI-airkinect-2-examples

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

Global site tag (gtag.js) - Google Analytics