2

Pageオブジェクトを作成し、印刷用にコントロールを追加しています。コードは機能しますが、ヘッダーにスタイルシートリンクを追加する方法が見つかりません。貼り付けたコードで、ヘッダーへのリンクを追加してから、ページにヘッダーコントロールを追加しようとしていますが、これによりエラーが発生します。

このコンテキストではリクエストを使用できませんSystem.Web.UI.Page.get_Request()+8700216 System.Web.UI.HtmlControls.HtmlHead.RenderChildren(HtmlTextWriter writer)+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
4

1 に答える 1

1

あなたが考えている方法で動的にページを作成することは本当にできません。あなたがしているのはPageオブジェクトを作成することだけですが、ASP.netパイプラインを介して作成していません。

つまり、PageオブジェクトがIHttpHandlerリクエストのforとして設定されておらず(したがって、andなどの必要なすべてのコンテキストオブジェクトを含む)が渡されておらず、HttpApplicationページライフサイクルメソッド(など)のいずれかが呼び出されています。失敗する。 RequestResponseRenderControl

ASP.Net Webフォームには、ページを文字列にレンダリングする簡単な方法がありません。「アタッチされていない」ページオブジェクトを作成し、それにコントロールを追加しても、残念ながらそれほど遠くまでは行きません。何らかの理由でページのライフサイクル外でコントロールをレンダリングする必要がある場合は、.ascxファイルをロードしてレンダリングすることでレンダリングできる場合がありますが、これはニーズに対して十分に動的ではない場合があります。

これらのコントロールからHTMLを取得して、何をしようとしているのか聞いてもいいですか?

于 2010-09-30T18:01:18.613 に答える