2010-09-30 50 views
2

我正在創建一個Page對象併爲其添加控件以用於打印目的。代碼工作,但我找不到一種方式來添加樣式錶鏈接到標題。在我粘貼的代碼中,我試圖向頁眉添加鏈接,然後將頁眉控件添加到頁面,但這會導致錯誤:添加樣式錶鏈接到動態創建的頁面對象

請求在此上下文中不可用 System.Web.UI。 Page.get_Request()8700216個 System.Web.UI.HtmlControls.HtmlHead.RenderChildren(HtmlTextWriter的作家)+83

Function getControlHtml() As String 
    Dim sw As New StringWriter 
    Dim tw As New HtmlTextWriter(sw) 

    Dim pg As New Page() 
    pg.EnableEventValidation = False 

    Dim cssLink As New HtmlLink 
    cssLink.Href = "~/css/StyleSheet.css" 
    cssLink.Attributes.Add("rel", "Stylesheet") 
    cssLink.Attributes.Add("type", "text/css")   

    'works without this code 
    Dim head As New HtmlHead 
    head.Controls.Add(cssLink) 
    pg.Controls.Add(head) 

    Dim frm As New HtmlForm 
    pg.Controls.Add(frm) 
    frm.Attributes.Add("runat", "server") 
    frm.Controls.Add(pnlMACForm) 
    pg.DesignerInitialize() 
    pg.RenderControl(tw) ' <-- 

    Return sw.ToString() 
End Function 

回答

1

你真的不能動態地在你想的方式創建一個頁面。你所做的只是創建Page對象,但是你沒有通過ASP.net管道完成它。

這意味着,在頁面對象還沒有被設置爲IHttpHandler爲請求(並且因此沒有被切換包含所有上下文對象需要,像RequestResponse一個HttpApplication),和調用任何頁面生命週期方法(如RenderControl)將會失敗。

ASP.Net webforms沒有簡單的方法將頁面呈現爲字符串。不幸的是,創建一個「未連接」的頁面對象並向其添加控件並不會讓你走得很遠。如果您出於某種原因需要在頁面生命週期之外呈現控件,則可以通過loading and rendering .ascx files來完成,但這可能不足以滿足您的需求。

我可以通過從這些控件獲取HTML來問你想要做什麼嗎?

+0

感謝您的回覆womp。我知道走這條路很有風險和脆弱。我試圖創建一個快速,可重用的方法來抓取部分頁面進行打印。 – 2010-09-30 18:21:02

+0

我打算使用另一種可以工作的方法,只需要更多的html代碼。 – 2010-09-30 18:29:31