更改标题并在Razor中添加Facebook OG Meta

时间:2017-09-15 21:40:46

标签: c# facebook razor 2sxc

2sxc博客应用的博客帖子不会通过Facebook共享按钮与正确的标题共享。目前博客文章Razor使用javascript处理标题更改。 Facebook和搜索引擎不喜欢这样。结果他们最终从父页面获得默认标题。要修复我需要通过C#Razor文件“_Post Details.cshtml”更改页面标题。另外添加og:title和og:image meta将是一个奖励。

我可以轻松地构建元数据:

// 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();

诀窍是获取对页眉的引用。我看过几个老帖子。当我从Chris Hammond那里尝试这个代码时,我得到一个“无法将类型'System.Dynamic.DynamicObject'转换为'DotNetNuke.Framework.CDefault':

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

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

1 个答案:

答案 0 :(得分:3)

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

我将代码添加到了我的" 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);