2010-03-21 19 views
6

我正在使用BuildManager類加載動態生成的ASPX文件,請注意它沒有相應的.cs文件。使用Build Manager類加載ASPX文件並填充其控件

使用下面的代碼我能夠加載aspx文件,我甚至能夠循環訪問動態創建的aspx文件的控件集合,但是當我將值分配給控件時,它們不會顯示它。例如,如果我將值「虛擬」綁定到aspx頁面的TextBox控件,則文本框將保持爲空。

下面是我使用

 

protected void Page_Load(object sender, EventArgs e) 
    { 
     LoadPage("~/Demo.aspx"); 
    } 
    public static void LoadPage(string pagePath) 
    { 
     // get the compiled type of referenced path 
     Type type = BuildManager.GetCompiledType(pagePath); 


     // if type is null, could not determine page type 
     if (type == null) 
      throw new ApplicationException("Page " + pagePath + " not found"); 

     // cast page object (could also cast an interface instance as well) 
     // in this example, ASP220Page is a custom base page 
     System.Web.UI.Page pageView = (System.Web.UI.Page)Activator.CreateInstance(type); 

     // call page title 
     pageView.Title = "Dynamically loaded page..."; 

     // call custom property of ASP220Page 
     //pageView.InternalControls.Add(
     // new LiteralControl("
         
 
Served dynamically...")); // process the request with updated object ((IHttpHandler)pageView).ProcessRequest(HttpContext.Current); LoadDataInDynamicPage(pageView); } private static void LoadDataInDynamicPage(Page prvPage) { foreach (Control ctrl in prvPage.Controls) { //Find Form Control if (ctrl.ID != null) { if (ctrl.ID.Equals("form1")) { AllFormsClass cls = new AllFormsClass(); DataSet ds = cls.GetConditionalData("1"); foreach (Control ctr in ctrl.Controls) { if (ctr is TextBox) { if (ctr.ID.Contains("_M")) { TextBox drpControl = (TextBox)ctr; drpControl.Text = ds.Tables[0].Rows[0][ctr.ID].ToString(); } else if (ctr.ID.Contains("_O")) { TextBox drpControl = (TextBox)ctr; drpControl.Text = ds.Tables[1].Rows[0][ctr.ID].ToString(); } } } } } } }

回答

4

我看到你從How To Dynamically Load A Page For Processing有你的代碼的一部分的代碼。閱讀評論,因爲這是由邁克one

反轉這樣的:

((IHttpHandler)pageView).ProcessRequest(HttpContext.Current); 
LoadDataInDynamicPage(pageView); 

要這樣:

LoadDataInDynamicPage(pageView); 
((IHttpHandler)pageView).ProcessRequest(HttpContext.Current); 

在這種情況下改變調用的順序不會改變最終的結果,我認爲。 Commutativity property的倒數。 :)