2011-12-13 60 views
1

目前我有一個單一的Example.aspx文件(沒有代碼背後的),我想加載它,填充它的控件,獲取它的輸出並做一些事情(在一個http處理程序中) 。填充從ASPX文件中動態實例化頁面的控件?

我在做什麼是這樣的:

// Gets the page and instantiates it? 
Type type = BuildManager.GetCompiledType("~/Example.aspx"); 
Page page = (Page)Activator.CreateInstance(type); 

// ProcessRequest of page here? 

// Error happens here, the page doesn't have any controls (but there is a label). 
((Label)page.FindControl("Label")).Text = "Hello World"; 

using (StringWriter output = new StringWriter()) 
{ 
    // Execute the page and output the result into the string writer. 
    HttpContext.Current.Server.Execute(page, output, false); 

    // Do something with the output (or save it, email it, etc) 
    // ...in this case we render it. 
    context.Response.ContentType = "text/html"; 
    context.Response.Write(output.ToString()); 
} 

但由於頁面實例沒有任何控制它不工作(需要創建子控件?)。

如果我添加:

page.ProcessRequest(HttpContext.Current); 

它的工作原理,但我認爲它運行整個頁面生命週期和包括渲染頁面的響應,這是我不想要的。

+1

你爲什麼要這樣做? (我出於好奇而問)這只是一個實驗,還是你有一個特定的目的? – jwiscarson

+0

http://stackoverflow.com/a/1732213/284240 –

+0

@jwiscarson:這是一個實驗,並嘗試使用asp.net進行簡單模板。而不是實現我自己的模板系統,我希望asp.net來做到這一點。 –

回答

1

當使用激活器創建頁面實例時,可以使用init或load事件來執行額外的代碼,同時處理http請求。不要忘記它仍然是一個事件驅動的模型!我希望它有幫助。