動的に作成されたページオブジェクトにスタイルシートリンクを追加します

StackOverflow https://stackoverflow.com/questions/3833008

質問

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
役に立ちましたか?

解決

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

これは、Page オブジェクトが IHttpHandler リクエストに対して(したがって、まだ渡されていません) HttpApplication 必要なすべてのコンテキスト オブジェクトが含まれています。 Request そして Response)、ページのライフサイクル メソッドのいずれかを呼び出します(たとえば、 RenderControl)は失敗します。

ASP.Net Web フォームには、ページを文字列にレンダリングする簡単な方法がありません。「未接続」のページ オブジェクトを作成してそこにコントロールを追加しても、残念ながらそれほど大きな成果は得られません。何らかの理由でページのライフサイクルの外でコントロールをレンダリングする必要がある場合は、次の方法で実行できる場合があります。 .ascx ファイルのロードとレンダリング, ただし、これはニーズを満たすほど動的ではない可能性があります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top