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 ...
随机推荐
- Dexpress 中 grid的使用
grid 中加入checkbox Run desiger Columns ColumnEdit中选择checkbox 此时我们要在后台手动指定一个数据列如下代码: dtRebatesReport.Co ...
- C# WinForm 中英文实现, 国际化实现的简单方法
来源:http://www.jb51.net/article/45675.htm,今天看到了借鉴过了,保存一下,下次开发直接用嘻嘻 软件行业发展到今天,国际化问题一直都占据非常重要的位置,而且应该越来 ...
- SQL Server2000清除数据库日志
sqlserver2000压缩日志 可以将jb51.ldf文件变得很小,方便备份数据库等,在sqlserver查询分析器中执行即可.复制代码 代码如下: DUMP TRANSACTION [jb51] ...
- sqlserver sp模板
某公司内部的sp模板 create procedure [usp_my_procedure_name] as begin set nocount on; declare @trancount int; ...
- for循环中的 else,break
- Expert 诊断优化系列------------------内存不够用么?
现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高.软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治.开发人员解决数据问题基本又是 ...
- 防刷票机制研究和.NET HttpRequest Proxy
最近应朋友之约 测试他做的投票网站 防刷票机制能力如何,下面有一些心得和体会. 朋友网站用PHP写的,走的是HttpRequest,他一开始认为IP认证应该就差不多了.但说实话这种很low,手动更换代 ...
- SharpFileDB - a file database for small apps
SharpFileDB - a file database for small apps 本文中文版在此处. I'm not an expert of database. Please feel fr ...
- [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
本人博客已转移至:http://www.exblr.com/liam 为什么需要依赖注入 在[ASP.NET MVC 小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离( ...
- Entity Framework Core 1.1 Preview 1 简介
实体框架核心(EF Core)是Entity Framework的一个轻量级,可扩展和跨平台版本. 10月25日,Entity Framework Core 1.1 Preview 1发布了. 升级到 ...