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”)会导致空引用异常。
答案 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);