2017-09-15 111 views
1

2sxc博客應用的博客文章未與Facebook分享按鈕的正確標題共享。目前博客文章Razor使用javascript處理標題更改。 Facebook和搜索引擎不喜歡那樣。結果他們最終從父頁面獲得默認標題。要解決我需要通過C#Razor文件「_Post Details.cshtml」更改頁面標題。另外添加og:title和og:image meta會是一個好處。更改標題並在剃刀中添加Facebook OG 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(); 

竅門就是在頁面頭部的引用。我看過幾箇舊帖子。我得到一個「無法轉換類型‘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(‘頭’)導致空參考例外。

回答

3

好的感謝Birsky89在https://gist.github.com/birksy89/c755fd83d0943b5ab94b和波拉愛德華在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); 
+0

很高興你找到答案。最好將這些問題標記爲已回答,以便用戶受益。 – iJungleBoy