如果您使用在 ASPX 页面前端定义的文字,则无需以编程方式将任何控件添加到 Page.Header.Controls。选择一种方法或另一种方法。
通用代码
首先,将此代码添加到您的页面类中。它从主要内容块(id 查询字符串参数)加载ContentData 及其元数据,如果存在(ekfrm 查询字符串参数)并返回到表单块,最后返回到 PageBuilder 页面布局如果存在(pageid 查询字符串参数)。 选项 1 和 选项 2 都要求所有这些“通用代码”都存在于您的页面类中才能正常工作。
private bool _isContentLoaded;
private Ektron.Cms.ContentData _content;
private string GetMetadataFromPrimaryContent(string metadataName)
{
EnsureContentIsLoadedFromEktron();
if (_content == null || _content.MetaData == null) return null;
var data = _content.MetaData.FirstOrDefault(md => md.Name == metadataName);
return data == null ? null : data.Text;
}
private void EnsureContentIsLoadedFromEktron()
{
if (_isContentLoaded) return;
_isContentLoaded = true;
var cm = new Ektron.Cms.Framework.Content.ContentManager();
long id;
long.TryParse(Request.QueryString["id"], out id);
if (id > 0)
_content = cm.GetItem(id, true);
if (_content != null) return;
long.TryParse(Request.QueryString["ekfrm"], out id);
if (id > 0)
_content = cm.GetItem(id, true);
if (_content != null) return;
// if no content is returned and we have a page id,
// try getting that content block, since PageBuilder
// pages can have metadata on them.
long.TryParse(Request.QueryString["pageid"], out id);
if (id > 0)
_content = cm.GetItem(id, true);
}
选项 1:使用文字。
<asp:Literal ID="ltlTwitterCard" runat="server" />
protected void Page_Load(object sender, EventArgs e)
{
var metadataValue = GetMetadataFromPrimaryContent("TwitterCard");
if (!string.IsNullOrEmpty(metadataValue))
ltlTwitterCard.Text = "<meta name=\"TwitterCard\" content=\""
+ metadataValue
+ "\" >";
}
选项 2:以编程方式将控件添加到 Head。
如果使用这条路线,请注意www.asp.net的以下内容:
注意<head> 元素包含runat="server"
属性,表示它是一个服务器控件(而不是
静态 HTML)。
protected void Page_Load(object sender, EventArgs e)
{
var meta = new HtmlMeta
{
Name = "TwitterCard",
Content = GetMetadataFromPrimaryContent("TwitterCard") ?? ""
};
this.Page.Header.Controls.Add(meta);
}