2009-10-01 16 views
9

Hey all! Ben aşağıdakileri yapın SonraLoadControl ve Page_Load olayı tetiklenmiyor

// create page, stringWriter 
Page _page = new Page(); 
StringWriter _writer = new StringWriter(); 

// get popup control 
Controls_Popup_ForumThreadForm _control = _page.LoadControl("~/Controls/Popup_ForumThreadForm.ascx") as Controls_Popup_ForumThreadForm; 

: Ben bir Web Yöntem aracılığıyla bir UserControl yüklenmesi ve bu şekilde LoadControl işlevselliğini kullanıyorum

// add control to page 
_page.Controls.Add(_control); 

HttpContext.Current.Server.Execute(_page, _writer, false); 

Sorun kontrolünün Page_Load olay kokan olmasıdır Hiç ateş etmeyin. Başka bir işlev ekler ve denetimi sayfanın Kontroller koleksiyonuna eklemeden önce onu çağırırsanız, bu işlev tetiklenir, ancak Page_Load olayı tetiklenmez.

Fikrin var mı? Hepinize teşekkürler!

+0

Daha fazla okuyucu almak için etiketlere ** C# ** ve ** Asp.Net ** etiketlerini ekleyebilirsiniz. (Ve 2 yaşındaki konulara yorum yapmadan önce yayın tarihlerini kontrol etmeliyim. Sadece cevapsız sorularla ilgileniyordum). –

cevap

1

onay ASP.NET Page Life Cycle Overview

PreInit: Başlangıç ​​safhasından sonra yükseltilmiş tam ve başlatma aşaması başlar öncedir.

kullanımı aşağıdaki için bu etkinlik:

Check the IsPostBack property to determine whether this is the first time the page is being processed. The IsCallback and IsCrossPagePostBack properties have also been set at this time. 

Create or re-create dynamic controls. 

Set a master page dynamically. 

Set the Theme property dynamically. 

Read or set profile property values. 
0

sayfa yaşam döngüsünün PreInit aşamasında denetimi ekleyin: Bildiğim kadarıyla dayanarak

var page = new Page(); 
var writer = new StringWriter();    
page.PreInit += new EventHandler((s, e) => 
{ 
    var control = page.LoadControl(""); 
    (Page)s).Controls.Add(control); 
}); 
HttpContext.Current.Server.Execute(page, writer, false); 
+0

Bu kod bloğu nerede bulunuyor? sanırım page_init içinde olmalı .. bir yaşam döngüsü sorunu var gibi görünüyor ... –

4

o zaman olayları yürütmek mümkün değildir dinamik olarak kontroller. Ancak, çalışan kullanıcı denetimlerini gerçekleştirmede bir numaram var.

Kullanıcı denetiminin fiziksel yolunu ve özelliklerin listesini alan bir kullanıcı denetimi oluşturmak için bir işlev kullanıyorum. Kullanıcı denetiminde, bir yöntem gibi ve özel kodumu çalıştırdığımda özel bir özellik tanımladım. Örneğin bir özellik tanımlamak işlemek gerekir kullanıcı denetiminde

public static string RenderUserControl(string path, List<KeyValuePair<string, object>> properties) 
    { 
     Page pageHolder = new Page(); 
     UserControl viewControl = (UserControl)pageHolder.LoadControl(path); 
     viewControl.EnableViewState = false; 
     Type viewControlType = viewControl.GetType(); 
     foreach (var pair in properties) 
     { 
      PropertyInfo property = viewControlType.GetProperty(pair.Key); 
      if (property != null) 
      { 
       property.SetValue(viewControl, pair.Value, null); 
      } 
     } 
     HtmlForm f = new HtmlForm(); 

     f.Controls.Add(viewControl); 

     pageHolder.Controls.Add(f); 
     StringWriter output = new StringWriter(); 
     HttpContext.Current.Server.Execute(pageHolder, output, false); 
     return (output.ToString()); 
    } 

, RunMyCode seti istediğiniz ve en son tanımladığınız özel özellik eklemek herhangi özelliği: Bu İşlevini Render olduğunu. kullanıcı kontrolü işlemek durumunda

data.Add(new KeyValuePair<string, object>("RunMyCode", SomeDataOrNothing)); 

, daha sonra RunMyCode özelliğinin değerini kontrol ederek eğer set edilirse, elle etkinlikleri normal getireceğini yöntemleri çağırmak.

+0

iyi bir çözüm, cevap olarak işaretlenmiş olmalıdır! Teşekkürler! –

İlgili konular