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
War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top