2010-07-22 29 views
7

Sayfa olmadan bir denetimi nasıl yükleyebilirim?Yük olmadan LoadControl Kullanma Page

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

I HttpContext.Current 'var, eğer bir şekilde işe yararsa ... – BrunoLM

+0

Bunun amacının ne olduğunu sorsam sorun olur mu? Farklı bir yaklaşım düşündün mü? –

+0

Tüm denetimleri ASCX'ten yüklemeliyim. Kodum, Sayfa nesnesi var olduğunda çalışır. Ama bu durumda benim kontrolüm bir sayfa olmadığı bir bağlamda ve bir nedenden dolayı işe yaramıyor. (Telerik Sitefinity'in düzenleme modudur). Kodum, sanal bir yoldan bir örnek oluşturmak için BuilderManager kullanır, belki de başka bir şekilde yüklerse yükleyebilirim ... – BrunoLM

cevap

12
Bu şekilde her HttpContext Sayfanız-Object alabilirsiniz

:

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

Bu yöntemi kullanmak mümkün mü, Application_Start içindeki global.asax dosyasından mı? Global'in bir Page'e döneceğine inanmıyorum. – Corgalore

+0

Niçin uygulama yaşamında yalnızca bir kez çağrılan Application_Start'te bir sayfa örneği niçin duruyorsunuz? –

+0

UserControl'leri Uygulama başlangıcında yüklemeye ve kodlarını yürütmeye çalışıyordum. Bu sahte bir eklenti mekanizmasıydı. TemplateControl sınıfında – Corgalore

-1

LoadControl Sayfası'nda bir yöntem değildir, bu bir yöntem var Kontrol sınıfının

tek yoksa sadece yerine her zaman bir sayfa yeni bir örneğini oluşturabilir

+1

LoadControl tanımlanmıştır. Sayfa ve UserControl sınıfları için kullanılabilir, ancak Denetim (veya CompositeControl) için değil. – AaronSieb

3

Page.LoadControl() sizin kontrolünde LoadControl() kullanabilirsiniz:

(Page ?? new Page()).LoadControl(...)