Link hinzufügen Sheet dynamisch erstellte Seite Objekt
-
26-09-2019 - |
Frage
Ich erstelle ein Page-Objekt und das Hinzufügen eine Kontrolle, um es für die Zwecke zu drucken. Der Code funktioniert, aber ich kann nicht einen Weg finden, einen Stylesheet-Link zu dem Header hinzuzufügen. Im Code eingefügt ich Ich versuche, einen Link zu dem Header hinzufügen und dann die Header-Steuerelement auf der Seite hinzufügen, aber dies führt zu einem Fehler:
Anfrage ist in diesem Zusammenhang nicht verfügbar System.Web.UI.Page.get_Request () 8.700.216 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
Lösung
Sie können nicht wirklich eine Seite dynamisch in der Weise, dass Sie denken erstellen. Alles, was Sie tun, ist das Page-Objekt erstellen, aber Sie haben es nicht über die ASP.net Pipeline erfolgen.
Das bedeutet, dass die Page-Objekt nicht gesetzt wurde als IHttpHandler
für die Anforderung (und hat somit nicht übergeben worden ein HttpApplication
enthält alle Kontextobjekte braucht es, wie Request
und Response
), und mit einer der Seite aufrufen Lifecycle-Methoden (wie RenderControl
) sind zum scheitern verurteilt.
ASP.Net Webforms hat nicht eine einfache Möglichkeit, um eine Seite zu einer Reihe von Rendering. ein „ungebunden“ Seite Objekt Erstellen und Hinzufügen von Steuerelement zu wird es leider nicht sehr weit führen. Wenn Sie wirklich Kontrollen außerhalb des Seitenlebenszyklus aus irgendeinem Grunde müssen machen, können Sie in der Lage sein, es zu tun, indem Sie Laden und Rendern .ascx Dateien , aber diese für Ihre Bedürfnisse nicht dynamisch genug sein kann.
Darf ich fragen, was Sie versuchen, indem sie den HTML von diesen Kontrollen zu tun?