2009-09-16 58 views
24

我試圖以編程方式添加<meta>。當.aspx頁面中有Head元素runat = "server"時,它工作正常。以編程方式在C中添加元標記#

後面的代碼是:

HtmlMeta meta = new HtmlMeta(); 
meta.Name = "robots"; 
meta.Content = "noindex,follow"; 
this.Page.Header.Controls.Add(meta); 

但是我對包含了像<% ... %>代碼塊的頭標籤的一些腳本,所以我不能保持runat = "server"值。

問題是我必須以編程方式添加元標記,因爲它取決於數據庫中的值。

有沒有辦法解決這個問題,以便我的頭元素內的腳本像往常一樣工作,我可以通過編程添加元標記?

回答

35

OK,我測試了answer by veggerby,和它完美的作品:

<header>部分:

<asp:PlaceHolder id="MetaPlaceHolder" runat="server" /> 

注意,Visual Studio中可能會顯示在佔位符標記警告,因爲它不認可作爲標題內的已知元素,但您可以忽略它。有用。

在C#代碼:

HtmlMeta meta = new HtmlMeta(); 
meta.Name = "robots"; 
meta.Content = "noindex,follow"; 
MetaPlaceHolder.Controls.Add(meta); 

或者(因爲你已經在你的標題部分使用<% %>代碼塊),你可以直接標記元,並從服務器端只檢索值:

<meta name="robots" content="<%=GetMetaRobotsValueFromDatabase()%>" /> 
+0

得益於它完美 – subha 2009-09-16 12:11:13

+0

道歉了很多 - 該代碼太長髮布的評論,所以我增加了一個答案(使用代碼)以下。非常感謝! – 2011-01-27 12:25:59

5

嘗試移動您在<%....%>中執行的任何操作。如果您正在使用腳本向頁面添加內容,則可以用asp:Literal控件替換它,然後將您之前在腳本塊中計算的值設置爲代碼隱藏,並將Literal.Text設置爲該值。

2

我還沒有測試過它,但也許你可以在<head></head>標記內添加<asp:Placeholder>,並添加元標記。

+0

非常感謝您的解決方案幫助我 – subha 2009-09-16 12:11:45

6

或者你可以把你的元標記在頭,一個ID和中用runat =「服務器」 ......然後後面的代碼中說

myMetaTag.Content = "noindex,follow"; 

myMetaTag.Visible = false; 

或任何你想要的。

7

非常感謝Awe for the solution!我已經在(error404.ascx)ASP中實現了這個代碼。NET用戶控制如下:

<%@ Control Language="C#"%> 
<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.TrySkipIisCustomErrors = true; //Suppress IIS7 custom errors 
     Response.StatusCode = 404; 
     SetRobotsHeaderMetadata(); 
    } 

    private void SetRobotsHeaderMetadata() 
    { 
     HtmlMeta meta = new HtmlMeta(); 
     meta.Name = "robots"; 
     meta.Content = "noindex,follow"; 
     this.Page.Master.FindControl("cphPageMetaData").Controls.Add(meta); 
    } 
</script> 

用下面的母版:

<%@ Master Language="C#" AutoEventWireup="true" Inherits="MyMaster" %> 
<script runat="server"> 
    ... 
</script> 

<!DOCTYPE html> 
<html lang="en-GB"> 
    <head> 
     <title>Site title here</title> 

     <asp:contentplaceholder runat="server" id="cphPageMetaData"> 
     </asp:contentplaceholder> 
    </head> 

    <body> 
     ... 
    </body> 
</html> 
0

這種情況的最佳解決方案,我沒有任何錯誤或警告成功籤:

的JavaScript代碼,這包含<% ... %>代碼,已從head部分刪除並放置在body部分。

0

你可以定義你的meta標籤像這樣的靜態字符串:

Private Shared MetaLanguage As String = 
    String.Format("<meta http-equiv=""Content-Language"" content=""{0}""/>", CultureInfo.CurrentUICulture.TwoLetterISOLanguageName) 

然後將它們放置在你的腦袋像這樣:

<head runat="server"> 
    <%=MetaLanguage%> 
</head> 

這允許你使用任何元標記值和很容易閱讀和定製。注意:使用Shared關鍵字(靜態)有助於提高性能。

-3

MetaDescription =「你的元描述轉到這裏」; MetaKeywords =「Keyword1,Keyword2,Keyword3」;

6

我覺得這是最好的辦法:

​​

享受!

-3

好的......我實際上只使用C#...或HTML到C#中。 我從來沒有在文件aspx中使用codebehind,設計器或webcontrols ...所以我編程一切從類...並動態。

結果:

HtmlMeta meta = new HtmlMeta(); 
meta.Name = "robots"; 
`meta.Content = "Here is what you want";` 
var page=HttpContext.Current.Handler as Page; 
page.Header.Controls.Add(meta); 
相關問題