关闭页面特效

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(); } } }
View Code

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

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

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

1
2
3
4
5
6
7
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 = 1)] //作者 public string Author { get; set; } [DataMember(Order = 3)] //关键字 public string Keywords { get; set; } [DataMember(Order = 5)] //描述 public string Description { get; set; } [DataMember(Order = 7)] public Dictionary<string, string> Customs { get; set; } [DataMember(Order = 8)] //html标题 public string HtmlTitle { get; set; } [DataMember(Order = 10)] 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; } } }
View Code

当某个“字段”不为空的时候,就调用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))); }

 


__EOF__

作  者ღKawaii
出  处https://www.cnblogs.com/kmsfan/p/Kooboo-CMS-Html-FrontHtml-Meta.html
关于博主:一个普通的小码农,为了梦想奋斗
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   yangliwen  阅读(683)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2014-04-04 用HTML5 CANVAS做自定义路径的动态效果图片!
0
0
关注
跳至底部
document.getElementById("homeTopTitle").innerText="ღKawaii";
点击右上角即可分享
微信分享提示