Kooboo CMS - @Html.FrontHtml().Meta()详解。
下面是代码:
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()详解。的更多相关文章
- Kooboo CMS - Html.FrontHtml.Position 详解
DataContract 数据契约 http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html https://msdn.micr ...
- Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解
首先我们找到这个类. 这个类有如下的方法: #region Title & meta [Obsolete("Use HtmlTitle")] public IHtmlStr ...
- Kooboo CMS - Html.FrontHtml[Helper.cs] 各个方法详解
下面罗列了方法详解,每一个方法一篇文章. Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解 Kooboo CMS - Html.FrontHtml.Posit ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- Django model 中的 class Meta 详解
Django model 中的 class Meta 详解 通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(mode ...
- html5中viewport与meta详解
网上解释手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中 ...
- <meta>详解
一.元数据和<meta> 元数据是描述以提供关于其他数据的数据,在<meta>中,html document是被描述的数据,meta标签中包括的数据是描述html docume ...
- meta 详解,html5 meta 标签日常设置
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...
- html中的meta详解
1 name=viewport <meta name="viewport" content="width=device-width,initial-scale=1 ...
随机推荐
- Vuforia结合Skyshop: Image-Based Lighting Tools & Shaders插件实现真实的光照效果
Skyshop: Image-Based Lighting Tools & Shaders 插件地址:https://www.assetstore.unity3d.com/en/#!/cont ...
- IntelliJ IDEA 15 激活码 正版 可离线激活
43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...
- 一步步学习javascript基础篇(6):函数表达式之【闭包】
回顾前面介绍过的三种定义函数方式 1. function sum (num1, num2) { return num1 + num2; } //函数声明语法定义 2. var sum = funct ...
- 你所不知道的JavaScript数组
相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情.但是本文着重要介绍的并不是我们 ...
- Redis系列(五)-Opserver的监控
阅读目录: 基本介绍 使用配置 部署实例 面板属性 基本介绍 Opserver是Stack Exchange的一个开源监控系统,基于Net.MVC开发,所以Net程序员可以轻松基于它二次开发.它主要监 ...
- 前端展望:取avalon,弃angular
打给比方,如果说angularJS是剑,那么avalon就是匕首.匕首比剑更易学,更快,更适合快速作战... 我们还是直接来实际的吧: 目前项目开发中有以下几个通用需求: 有前端路由系统,用来划分 ...
- 实战JS正则表达式
-正则表达式是一种文本模式的匹配工具. -文章导读: --1.正则对象的属性和方法 --2.字符串对象的方法 --3.使用正则表达式: ---3.1 给字符串加上千分符 ---3.2 字符串中出现次数 ...
- MySQL 指定各分区路径
200 ? "200px" : this.width)!important;} --> 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定 ...
- Functional Programming without Lambda - Part 2 Lifting, Functor, Monad
Lifting Now, let's review map from another perspective. map :: (T -> R) -> [T] -> [R] accep ...
- TODO:浅谈pm2基本工作原理
TODO:浅谈pm2基本工作原理 要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦 ...