2009-12-30 18 views
17

我正在使用Web用戶控件(.ascx),它將包含在常規Web窗體(.aspx)中,但我需要能夠動態插入代碼到用戶控件的文檔頭部。在我的Coldfusion日子裏,<cfhtmlhead>可以解決問題。在ASP.NET中是否有這樣的相似或類似的黑客?ASP.NET動態地將代碼插入頭部

+0

下面的答案似乎都依賴於具有runat =「server」屬性的頭,否則Page.Header爲null。 – user420667 2017-01-24 01:06:46

回答

29

要添加HTML標記,你可以做到以下幾點:

在你的用戶控件的代碼,您可以訪問Page.Header,這本身就是一種控制。到控制,你可以再添加新的控件:

HtmlGenericControl newControl = new HtmlGenericControl("someTag"); 
newControl.Attributes["someAttr"] = "some value"; 
Page.Header.Controls.Add(newControl); 

要添加腳本標記你不需要進入頭部標記,因爲在所有ASP.NET具有對爲你做的工作ClientScriptManager輔助方法:

下面是一些代碼,你也可以把你的用戶控件的代碼示例:

// Register some inline script: 
Page.ClientScript.RegisterClientScriptBlock(GetType(), "myAlertScript", "alert('hello!')", true); 

// Register a script reference: 
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js"); 
+2

我正在嘗試將一些Javascript添加到文檔的頭部。 – Kyle 2009-12-30 20:03:24

+0

謝謝,第二種方法似乎對我最好。 – Kyle 2009-12-30 20:52:56

9
this.Page.Header.Controls.Add 

通過這樣做,您將控件添加到頭部分。您可以添加任何類型的控件。如果您覺得需要添加簡單文本(或者您想手動編寫標籤),請查看LiteralControl類。

2

有使用C#代碼來修改網頁標題here一些指導。它應該可以在頁面加載完成之前執行的任何服務器端代碼正常工作。

一個簡單的例如

HtmlHead head = Page.Header; 
HtmlTitle title = new HtmlTitle(); 
title.Text = "Test Page"; 
head.Controls.Add(title); 

HTMLHead引用是命名空間

System.Web.UI.HtmlControls 

覆蓋自定義控件的load()方法添加而父.aspx頁面中被加載服務器 - 你需要在頁面標題中的控件或引用側。

0

我有一個簡單的解決方案。根據頁面的URL(作爲關鍵字)創建一個運行時內存緩存,該緩存包含有關y的x個信息(無論是文件引用,腳本文本還是生成JavaScript的類)並將其數據序列化爲JSON。 Newtonsoft對任何類的實例都有幫助。實際上,您可以使用它的輸出來根據給定的輸入初始化類的任何新實例。從某種意義上說,這意味着您可以讓您的任何特定類的實例自動實例化,而不管該實例處於何種用戶控制。最後,您創建一個簡單的Web表單來充當腳本引用和最終端點。它提取JavaScript(或者它是什麼),並將頭文件中的腳本引用吐出需要的客戶端代碼。

10

我意識到這是一個老問題,但這是另一個例子。

試試這個:

Page.Header.Controls.Add(
    new LiteralControl(
     "<script>alert('Literal Added to <Head>.');</script>" 
    ) 
); 

如果你想在<head>的特定索引添加腳本可以使用

AddAt(index, new LiteralControl(...))其中index 0等於的<head>

而且頂部,您需要在頭標中添加runat="server",例如<head id="head1" runat="server">

相關問題