下面是代码:

 public virtual IHtmlString Meta()
{
AggregateHtmlString htmlStrings = new AggregateHtmlString();
var htmlMeta = this.PageContext.HtmlMeta;
if (htmlMeta != null)
{
if (!string.IsNullOrEmpty(htmlMeta.Canonical))
{
htmlStrings.Add(new HtmlString(string.Format("<link rel=\"canonical\" href=\"{0}\"/>", Kooboo.StringExtensions.StripAllTags(htmlMeta.Canonical))));
}
if (!string.IsNullOrEmpty(htmlMeta.Author))
{
htmlStrings.Add(BuildMeta("author", htmlMeta.Author));
} if (!string.IsNullOrEmpty(htmlMeta.Description))
{
htmlStrings.Add(BuildMeta("description", htmlMeta.Description));
} if (!string.IsNullOrEmpty(htmlMeta.Keywords))
{
htmlStrings.Add(BuildMeta("keywords", htmlMeta.Keywords));
}
if (htmlMeta.Customs != null)
{
foreach (var item in htmlMeta.Customs)
{
htmlStrings.Add(BuildMeta(item.Key, item.Value));
}
}
if (!string.IsNullOrEmpty(htmlMeta.HtmlMetaBlock))
{
htmlStrings.Add(new HtmlString(htmlMeta.HtmlMetaBlock));
}
}
return htmlStrings;
}
private static IHtmlString BuildMeta(string name, string value)
{
return new HtmlString(string.Format("<meta name=\"{0}\" content=\"{1}\" />", name, Kooboo.StringExtensions.StripAllTags(value)));
}

  其中的Aggregate的意思是聚合,是个生僻词。我还是觉得我们有必要了解一下AggregateHtmlString这个类吧。按F12进入定义,结果是DLL,搜索这个类名,得到如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web; namespace Kooboo.CMS.Common
{
public class AggregateHtmlString : IHtmlString
{
List<IHtmlString> list;
public AggregateHtmlString()
: this(null)
{
}
public AggregateHtmlString(IEnumerable<IHtmlString> htmlStrings)
{
if (htmlStrings != null)
{
list = new List<IHtmlString>(htmlStrings);
}
else
{
list = new List<IHtmlString>();
}
}
public IEnumerable<IHtmlString> HtmlStrings
{
get
{
return list;
}
}
public void Add(IHtmlString htmlString)
{
list.Add(htmlString);
}
#region IHtmlString Members public string ToHtmlString()
{
StringBuilder sb = new StringBuilder();
foreach (var item in HtmlStrings)
{
if (item != null)
{
sb.Append(item.ToHtmlString());
}
}
return sb.ToString();
} #endregion
public override string ToString()
{
return ToHtmlString();
}
}
}

  我们发现这个类其实是继承了IHtmlString接口,那边这个AggregateHtmlString是在这个方法内如何应用到的呢?

我们先注意到了这个东西: var htmlMeta = this.PageContext.HtmlMeta;

也就是说,HtmlMeta是一个类,我们来一探究竟:我们先按F12然后这里只有一个GET方法:

        public HtmlMeta HtmlMeta
{
get
{
return htmlMeta;
}
}

  然后我们再进入这个MODEL,具体的我已经注释了,当然除了看不懂意思的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks; namespace Kooboo.CMS.Sites.Models
{
[DataContract]
public class HtmlMeta
{
[DataMember(Order = )]
//作者
public string Author { get; set; }
[DataMember(Order = )]
//关键字
public string Keywords { get; set; }
[DataMember(Order = )]
//描述
public string Description { get; set; } [DataMember(Order = )]
public Dictionary<string, string> Customs
{
get;
set;
}
[DataMember(Order = )]
//html标题
public string HtmlTitle { get; set; } [DataMember(Order = )]
public string Canonical { get; set; }
[DataMember]
//html meat块
/// To allow write custom html meta block. for example: <meta http-equiv="charset" content="XXX"> <meta property="title" content="{title}">
public string HtmlMetaBlock { get; set; }
}
}

当某个“字段”不为空的时候,就调用BuildMeta方法,把IHtmlString添加到html的list当中去。其中第一个参数是键,表示是何种META(Keyword,description),有关于有哪些meta标签可以看这里

        private static IHtmlString BuildMeta(string name, string value)
{
return new HtmlString(string.Format("<meta name=\"{0}\" content=\"{1}\" />", name, Kooboo.StringExtensions.StripAllTags(value)));
}

Kooboo CMS - @Html.FrontHtml().Meta()详解。的更多相关文章

  1. Kooboo CMS - Html.FrontHtml.Position 详解

    DataContract 数据契约 http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html https://msdn.micr ...

  2. Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解

    首先我们找到这个类. 这个类有如下的方法: #region Title & meta [Obsolete("Use HtmlTitle")] public IHtmlStr ...

  3. Kooboo CMS - Html.FrontHtml[Helper.cs] 各个方法详解

    下面罗列了方法详解,每一个方法一篇文章. Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解 Kooboo CMS - Html.FrontHtml.Posit ...

  4. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  5. Django model 中的 class Meta 详解

    Django model 中的 class Meta 详解 通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(mode ...

  6. html5中viewport与meta详解

    网上解释手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中 ...

  7. <meta>详解

    一.元数据和<meta> 元数据是描述以提供关于其他数据的数据,在<meta>中,html document是被描述的数据,meta标签中包括的数据是描述html docume ...

  8. meta 详解,html5 meta 标签日常设置

    <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...

  9. html中的meta详解

    1  name=viewport <meta name="viewport" content="width=device-width,initial-scale=1 ...

随机推荐

  1. 编写一个基本的连接池来实现连接的复用&一些工程细节上的优化

    package it.cast.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQL ...

  2. 基于腾讯手Q样式规范Frozen UI

    Frozen UI是一个开源的简单易用,轻量快捷的移动端UI框架.基于手Q样式规范,选取最常用的组件,做成公用离线包减少请求,升级方式友好,文档完善,目前全面应用在腾讯手Q增值业务中. css组件包括 ...

  3. .NET中的DES对称加密

    DES是一种对称加密(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法.一般密码长度为8个字节,其中56位加密密钥, ...

  4. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  5. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  6. 在C#代码中应用Log4Net(二)典型的使用方式

    不管用什么框架,学什么东西,最初的想法还不是尽快地用上这个框架,所以我们在这个章节还是不打算介绍具体配置节的应用,而是直接给出一个经典的使用样例,让你尽快上手.即使你对Log4Net的配置不熟悉也完全 ...

  7. Alljoyn瘦客户端库介绍(官方文档翻译)

    Alljoyn瘦客户端库介绍(上) 1.简介 本文档对AllJoynTM瘦客户端的核心库文件(AJTCL)进行了详尽的介绍.本文档介绍了系统整体架构,AllJoyn框架结构,并着重于介绍如何将嵌入式设 ...

  8. 完全使用一组 DSL 来操作 Grid 控件

    最近尝试了一下将 XtraGrid 的初始化工作封装成内部 DSL,例如一个普通的基础数据的增删改查操作的代码会像下面这样: public partial class UserForm : XtraF ...

  9. Step by Step 安装 BizTalk Server 2009

    原创地址:http://www.cnblogs.com/jfzhu/p/4020444.html 转载请注明出处 演示环境为Windows Server 2008 Enterprise, SQL Se ...

  10. C/C++预处理指令#define,#ifdef,#ifndef,#endif…

    2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多, ...