2009-09-16 40 views
24

Tôi đang cố gắng thêm theo chương trình <meta>. Nó hoạt động tốt khi có một thành phần Head với runat = "server" trong trang .aspx.Thêm thẻ meta theo lập trình trong C#

Các mã sau là:

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

Nhưng tôi có một số kịch bản trong thẻ đầu chứa khối mã như <% ... %>, vì vậy tôi không thể giữ giá trị runat = "server".

Vấn đề là tôi phải thêm thẻ meta theo lập trình, vì nó phụ thuộc vào giá trị từ cơ sở dữ liệu.

Có cách nào giải quyết vấn đề này sao cho tập lệnh của tôi bên trong phần tử đầu hoạt động như bình thường và tôi có thể thêm thẻ meta theo chương trình không?

Trả lời

35

OK, tôi đã thử nghiệm answer by veggerby, và nó hoạt động hoàn hảo:

Trong <header> phần:

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

Lưu ý rằng Visual Studio có thể hiển thị một cảnh báo trên thẻ giữ chỗ, bởi vì nó không được công nhận như một phần tử đã biết bên trong tiêu đề, nhưng bạn có thể bỏ qua điều này. Nó hoạt động.

Trong đoạn code C#:

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

Ngoài ra (vì bạn đã có khối mã sử dụng <% %> trong phần tiêu đề của bạn), bạn có thể tag meta trực tiếp và lấy chỉ có giá trị từ phía máy chủ:

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

thanks a lot nó hoạt động hoàn hảo – subha

+0

Apologies - Mã này đã quá lâu để gửi dưới dạng một comment vì vậy tôi thêm một câu trả lời (sử dụng mã của bạn) dưới đây . Cảm ơn nhiều! –

5

Hãy thử di chuyển mọi thứ mà bạn đang thực hiện trong số <% ....%> sang mã phía sau. Nếu bạn đang sử dụng kịch bản để thêm nội dung vào trang, bạn có thể thay thế nó bằng một điều khiển: Kiểm soát văn bản và sau đó đặt giá trị bạn đã tính trước đó trong khối tập lệnh thành mã-đằng sau và đặt Literal.Text thành giá trị đó.

2

Tôi chưa thử nghiệm, nhưng có thể bạn có thể thêm <asp:Placeholder> vào trong thẻ <head></head> và thêm thẻ meta vào thẻ này.

+0

Cảm ơn rất nhiều giải pháp của bạn đã giúp tôi – subha

6

Hoặc bạn chỉ có thể đặt thẻ meta của bạn trong tiêu đề, với một ID và một runat = "server" ... sau đó trong mã đằng sau nói

myMetaTag.Content = "noindex,follow"; 

hoặc

myMetaTag.Visible = false; 

hoặc bất cứ điều gì bạn muốn.

7

Rất cảm ơn Awe for the solution! Tôi đã triển khai mã này trong ASP (error404.ascx).NET User Control như sau:

<%@ 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> 

Với masterpage sau:

<%@ 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

Giải pháp tốt nhất cho điều này, mà tôi thành công kiểm tra mà không cần bất kỳ lỗi hoặc cảnh báo:

Các mã JavaScript, trong đó chứa mã <% ... %>, đã bị xóa khỏi phần head và được đặt trong phần body.

0

Bạn có thể định nghĩa thẻ meta của bạn như là một chuỗi tĩnh như vậy:

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

Sau đó đặt chúng trong đầu của bạn như sau:

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

này cho phép bạn sử dụng bất kỳ giá trị thẻ meta và dễ đọc và tùy chỉnh. Lưu ý: Việc sử dụng từ khóa Shared (tĩnh) giúp cải thiện hiệu suất.

-3

MetaDescription = "Mô tả meta của bạn sẽ xuất hiện ở đây"; MetaKeywords = "Keyword1, Keyword2, Keyword3";

6

Tôi nghĩ rằng đây là cách tiếp cận tốt nhất:

this.Page.Header.Controls.Add(new LiteralControl(@"<meta ... />")); 

Thưởng thức!

-3

OK ... Tôi thực sự chỉ sử dụng C# ... Hoặc HTML vào C#. Tôi không bao giờ sử dụng codebehind, designer hoặc webcontrols trong tệp aspx ... Vì vậy, tôi lập trình mọi thứ từ các lớp học ... Và tự động.

Kết quả:

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); 
Các vấn đề liên quan