在 Razor 中更改标题并添加 Facebook OG 元数据

Change Title and Add Facebook OG Meta in Razor

用于 2sxc 博客应用程序的博客 post 没有通过 Facebook 共享按钮以适当的标题共享。当前博客 post Razor 处理 title-change 和 javascript。 Facebook 和搜索引擎不喜欢这样。结果,他们最终从 parent 页面获得了默认标题。要修复,我需要通过 C# Razor 文件“_Post Details.cshtml”更改页面标题。另外添加 og:title 和 og:image 元将是一个奖励。

我可以很容易地构建元数据:

// build facebook meta
HtmlMeta metaOGTitle = new HtmlMeta();
metaOGTitle.Attributes.Add("property", "og:title");    
metaOGTitle.Content = post.Title;
HtmlMeta metaOGImage = new HtmlMeta();
metaOGImage.Attributes.Add("property", "og:image");    
metaOGImage.Content = post.Image.ToLower();

诀窍是获取页面 header 的引用。我看过几个旧的 posts。我在尝试 Chris Hammond 的这段代码时得到 "cannot convert type 'System.Dynamic.DynamicObject' to 'DotNetNuke.Framework.CDefault":

DotNetNuke.Framework.CDefault tp = (DotNetNuke.Framework.CDefault)this.Page;
tp.Title = "This is my page title";

使用 Page.Header 或 Page.FindControl("Head") 会导致空引用异常。

好的,感谢 https://gist.github.com/birksy89/c755fd83d0943b5ab94b and Pola Edward at Change Page Title in DNN Programatically from Razor 的 Birsky89,我已经能够整理出一个相当简洁的解决方案。

我将代码添加到 "Post Details.cshtml" 的顶部,它运行得非常棒。

@using System.Web.UI.HtmlControls;

    // build facebook meta
    HtmlMeta metaOGTitle = new HtmlMeta();
    metaOGTitle.Attributes.Add("property", "og:title");    
    metaOGTitle.Content = post.Title;
    HtmlMeta metaOGImage = new HtmlMeta();
    metaOGImage.Attributes.Add("property", "og:image");    
    metaOGImage.Content = post.Image.ToLower();

    // change the title and add facebook meta      
    var pageObj = Context.CurrentHandler as Page;
    pageObj.Title = post.Title;
    pageObj.FindControl("Head").Controls.Add(metaOGTitle);
    pageObj.FindControl("Head").Controls.Add(metaOGImage);