動的に作成されたページオブジェクトにスタイルシートリンクを追加します
-
26-09-2019 - |
質問
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 を取得して何をしようとしているのか聞いてもいいですか?