2009-12-30 28 views
17

Tôi đang làm việc bên trong Điều khiển người dùng web (.ascx) sẽ được đưa vào biểu mẫu web thông thường (.aspx), nhưng tôi cần có khả năng chèn động code vào phần đầu của tài liệu từ User Control. Trong Coldfusion của tôi ngày <cfhtmlhead> sẽ thực hiện thủ thuật. Có tương đương với điều này trong ASP.NET hoặc một hack tương tự?ASP.NET chèn mã động vào đầu

+0

Các câu trả lời bên dưới dường như tất cả dựa vào tiêu đề có thuộc tính runat = "server", nếu không Page.Header là null. – user420667

Trả lời

29

Để thêm đánh dấu HTML bạn có thể làm như sau:

Trong mã của usercontrol của bạn, bạn có thể truy cập Page.Header, mà là chính nó một điều khiển. Để kiểm soát mà sau đó bạn có thể thêm các điều khiển mới:

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

Để thêm đánh dấu kịch bản bạn không cần truy cập vào thẻ đầu ở tất cả các từ ASP.NET có phương pháp helper trên ClientScriptManager mà làm việc cho bạn:

Dưới đây là ví dụ về một số mã bạn cũng có thể đặt trong mã điều khiển người dùng của bạn:

// 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

Tôi đang cố thêm một số Javascript vào phần đầu của tài liệu. – Kyle

+0

Cảm ơn, phương pháp thứ hai dường như hoạt động tốt nhất cho tôi. – Kyle

9
this.Page.Header.Controls.Add 

Bằng cách này, bạn sẽ thêm điều khiển vào phần đầu. Bạn có thể thêm bất kỳ loại điều khiển nào. Nếu bạn cảm thấy bạn cần phải thêm văn bản đơn giản (hoặc bạn muốn viết các thẻ theo cách thủ công), sau đó nhìn vào lớp LiteralControl.

2

có một số hướng dẫn về việc sử dụng C# code để thay đổi tiêu đề trang here. Nó sẽ hoạt động tốt từ bất kỳ mã phía máy chủ nào thực hiện trước khi tải trang hoàn tất.

Ví dụ đơn giản

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

HTMLHead tham chiếu là trong namespace

System.Web.UI.HtmlControls 

Override điều khiển tùy chỉnh của Load() phương pháp để thêm các điều khiển hoặc tham chiếu bạn cần vào tiêu đề trang trong khi trang mẹ .aspx đang được nạp Server- bên.

0

Tôi có giải pháp đơn giản cho việc này. Tạo một bộ nhớ đệm thời gian chạy dựa trên url của trang (như một khóa) chứa thông tin x về y (có thể là tham chiếu tệp, văn bản lệnh hoặc lớp tạo JavaScript) và tuần tự hóa dữ liệu của nó thành JSON. Newtonsoft là hữu ích cho các trường hợp của bất kỳ lớp nào. Trong thực tế, bạn có thể sử dụng đầu ra của nó để khởi tạo bất kỳ cá thể mới nào của một lớp dựa trên đầu vào đã cho. Theo một cách nào đó, điều đó có nghĩa là bạn có thể có các cá thể của bất kỳ lớp cụ thể nào được tự động khởi tạo mặc dù người dùng điều khiển cá thể nào đang bật. Cuối cùng, bạn tạo một biểu mẫu web đơn giản để làm tham chiếu tập lệnh và làm điểm cuối cuối cùng. Nó kéo JavaScript (hoặc những gì đã có nó) và spits ra mã phía khách hàng bạn cần như một tham chiếu kịch bản bên trong thẻ đầu.

10

Tôi nhận thấy đây là một câu hỏi cũ, nhưng đây là một ví dụ khác.

Hãy thử này:

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

Nếu bạn muốn thêm đoạn mã vào một chỉ số cụ thể của <head> bạn có thể sử dụng

AddAt(index, new LiteralControl(...)) nơi chỉ số 0 bằng phía trên cùng của <head>

Cũng , bạn cần phải thêm runat="server" vào thẻ đầu của bạn, ví dụ: <head id="head1" runat="server">

Các vấn đề liên quan