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 ...
随机推荐
- ps 实例部分
实例篇1:将不同图片通过阀值转换成黑白色人物头像 图像-黑白-曲向-阀值 本图像-复制-粘贴
- windows平台,WEB开发,喜欢IE + notepad的同行进来可以看。
用多个浏览器查看自己的page( 平台是notepad) 借助window的批处理,以及系统环境变量. 首先, 写个bat, 一句start %1 %2即可. %1和%2分别表示第一个和第二个参数. ...
- 发布一个自用的ansi转utf8程序
前几天网上下载了一个国外的源码示例,布署到IIS上,查看网页中文显示乱码,各种不方便,你懂的. 用记事本打开文件,显示是ANSI格式,另存为UTF8格式,保存,再查看页面就正常显示中文了. 文件好多, ...
- 浅谈Js原型的理解
一.js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了! 在参考了多方面的资料后,发现解释都太过专业,对于很多还没有接触过面向对象 语言的小白来说,有理解不了里面的专有名词!如果你没 ...
- xcodebuild编译ipa
#!/bin/sh # autoBuild.sh # CTest # # Created by Ethan on 14-11-3. # Copyright (c) 2014年 Ethan. All r ...
- 如何在没有域的环境中搭建AlwaysOn(二)
对DBA而言,不需要域就可以搭建SQL Server AlwaysOn是Windows Server 2016中最令人兴奋的功能了,它不仅可以降低搭建的成本,而且还减少了部署和运维的工作量. 上篇博客 ...
- 用java开发微信公众号:测试公众号与本地测试环境搭建(一)
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...
- 【原】Telerik radwindow 在IE10下偶尔报 unable to get value of the property 'toLowerCase' 的解决办法
笔者正在开发的新项目在升级了最新版本的Telerik Control和决定支持IE10后,遇到了一个很棘手的问题,偶尔会在打开Radwindow的时候报JS error :unable to get ...
- [Hadoop大数据]——Hive连接JOIN用例详解
SQL里面通常都会用Join来连接两个表,做复杂的关联查询.比如用户表和订单表,能通过join得到某个用户购买的产品:或者某个产品被购买的人群.... Hive也支持这样的操作,而且由于Hive底层运 ...