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 = 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; }
    }
}

当某个“字段”不为空的时候,就调用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)));
        }
时间: 2024-11-03 20:13:39

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

Kooboo CMS - Html.FrontHtml.Position 详解

DataContract 数据契约 http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html https://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datacontractattribute.aspx Html.FrontHtml.Position("main") 详解 1.首先我们打开工程文件,在搜索框里写上FrontHtml查

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

首先我们找到这个类. 这个类有如下的方法: #region Title & meta [Obsolete("Use HtmlTitle")] public IHtmlString Title() { return HtmlTitle(); } /// <summary> /// HTMLs the title. /// </summary> /// <returns></returns> public virtual IHtmlS

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

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

html5中viewport与meta详解

网上解释手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分.移动版的 Safari 浏览器最新引进了 viewport 这个 meta tag,让网页开发者来控制 viewport 的大小和缩放,其他手机浏览器也基本支持. <meta name="viewpor

python django模型内部类meta详解

Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应数据库表的.一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段.比如下面的代码中Human是一个抽象类,Employee是一个继承了Human的子类,那么在运行syncdb命令时,不会生成Human表,但是会生成一个Employee表,它包含了Human中继承来的字段,以后如果再添加一个Cu

meta详解

<meta name="viewport" content="" /> width [pixel_value | device-width] width 直接去设置具体数值大部分的安卓手机不支持的 但是IOS支持 user-scalable 是否允许缩放 (no||yes) initial-scale 初始比例 minimum-scale 允许缩放的最小比例 maximum-scale 允许缩放的最大比例 target-densitydpi -- dpi

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

<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"> <!-- 更加标准的 lang 属性写法 http://zhi.hu/XyIa --> <head> <!-- 声明文档使用的字符编码 --> <meta charset='utf-8'> <!-- 优先使用 IE 最新版本和 Chrome --&g

html中的meta详解

1  name=viewport <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> 1.width :控制viewport的大小,可以指定一个值,如600, 或者特殊的值,如device-width为设备的宽度(单位为缩放为100%的CSS的像素) 2.height :

html之meta详解

<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"> <!-- 更加标准的 lang 属性写法 http://zhi.hu/XyIa --> <head> <!-- 声明文档使用的字符编码 --> <meta charset='utf-8'> <!-- 优先使用 IE 最新版本和 Chrome --&g