Question

Je crée un objet Page et l'ajout d'un contrôle à des fins d'impression. Les travaux de code, mais je ne peux pas trouver un moyen d'ajouter un lien stylesheet à l'en-tête. Dans le code que je collais je suis en train d'ajouter un lien vers l'en-tête, puis ajouter le contrôle d'en-tête sur la page, mais cela provoque une erreur:

Demande n'est pas disponible dans ce contexte System.Web.UI.Page.get_Request () 8700216 System.Web.UI.HtmlControls.HtmlHead.RenderChildren (écrivain HtmlTextWriter) +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
Était-ce utile?

La solution

Vous ne pouvez vraiment pas créer une page dynamique de la manière que vous pensez. Tout ce que vous faites est de créer l'objet page, mais vous n'avez pas fait via le gazoduc ASP.net.

Cela signifie que l'objet page n'a pas été défini comme IHttpHandler pour la demande (et n'a donc pas été remis un HttpApplication contenant tous les objets le contexte dont il a besoin, comme Request et Response), et d'appeler une de la page méthodes du cycle de vie (comme RenderControl) vont à l'échec.

ASP.Net webforms n'a pas un moyen facile de rendre une page à une chaîne. Création d'un objet page « sans attaches » et en ajoutant des contrôles à elle, malheureusement, ne vous mènera pas très loin. Si vous avez vraiment besoin de rendre les contrôles en dehors du cycle de vie de page pour une raison quelconque, vous pourriez être en mesure de le faire par chargement et le rendu des fichiers .ascx , mais cela ne peut pas être assez dynamique pour vos besoins.

Puis-je demander ce que vous essayez de faire en obtenant le code HTML de ces contrôles?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top