2010-07-22 36 views
7

Làm cách nào để tải một điều khiển không có Trang?Sử dụng LoadControl mà không cần Trang

public void Something() 
{ 
    var ascx = /*LoadControl*/("my.ascx"); // being Page = null 
    var ctl1 = ascx.Controls[0]; 
    var ctl2 = ascx.Controls[1]; 
} 

my.ascx:

<%@ Control Language="C#" %> 
<asp:Literal ID="ctl1" runat="server" /> 
<asp:Label ID="ctl2" runat="server" /> 
+0

tôi có 'HttpContext.Current' nếu điều đó hữu ích bằng cách nào đó ... – BrunoLM

+0

Bạn có phiền không nếu tôi hỏi mục đích của việc này là gì? Bạn đã xem xét một cách tiếp cận khác? –

+0

Tôi phải tải tất cả các điều khiển từ một ASCX. Mã của tôi hoạt động khi đối tượng Trang tồn tại. Nhưng trong trường hợp này, kiểm soát của tôi nằm trong một ngữ cảnh không có trang và vì lý do nào đó, nó không hoạt động. (Đây là chế độ chỉnh sửa của Sitefinity của Telerik). Mã của tôi sử dụng BuilderManager để tạo một cá thể từ một đường dẫn ảo, có lẽ nếu tôi tải nó theo cách khác nó có thể hoạt động ... – BrunoLM

Trả lời

12

Bạn thể được trang-Object của bạn từ HttpContext theo cách này:

Page page = HttpContext.Current.Handler as Page; 
if (page != null) 
{ 
    // Use page instance to load your Usercontrol 
} 
+0

Có thể sử dụng phương thức này, nhưng từ tệp global.asax trong Application_Start? Tôi không tin rằng toàn cầu sẽ chuyển sang một Trang. – Corgalore

+0

Tại sao bạn neeed một trang dụ trên Application_Start, những gì được gọi là chỉ một lần trong một ứng dụng đời? –

+0

Tôi đã cố gắng tải UserControls lúc khởi động ứng dụng và thực thi mã của họ. Đó là một cơ chế plugin giả. – Corgalore

-1

LoadControl không phải là phương của Trang, đó là một phương pháp của lớp Control.

Bạn chỉ có thể sử dụng LoadControl() trong kiểm soát của bạn thay vì Page.LoadControl()

+1

LoadControl được định nghĩa trong lớp TemplateControl. Nó có sẵn cho các lớp Page và UserControl, nhưng không có trong Control (hoặc CompositeControl). – AaronSieb

3

Bạn luôn có thể tạo ra một thể hiện mới của một trang nếu bạn không có một:

(Page ?? new Page()).LoadControl(...) 
Các vấn đề liên quan