2010-09-30 4 views
2

Je crée un objet Page et j'y ajoute un contrôle à des fins d'impression. Le code fonctionne, mais je ne peux pas trouver un moyen d'ajouter un lien de feuille de style à l'en-tête. Dans le code que j'ai collé j'essaye d'ajouter un lien à l'en-tête et puis ajoute le contrôle d'en-tête à la page, mais cela provoque une erreur:Ajouter un lien de la feuille de style à un objet de page créé dynamiquement

La 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 

Répondre

1

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 ne l'avez pas fait via le pipeline ASP.net.

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

Les formulaires Web ASP.Net ne permettent pas de rendre facilement une page à une chaîne. Créer un objet de page "détaché" et y ajouter des contrôles ne vous mènera malheureusement pas loin. Si vous avez vraiment besoin de rendre des contrôles en dehors du cycle de vie de la page pour une raison quelconque, vous pouvez le faire par loading and rendering .ascx files, mais cela peut ne pas être assez dynamique pour vos besoins. Puis-je vous demander ce que vous essayez de faire en récupérant le code HTML de ces contrôles?

+0

Merci pour votre réponse womp. Je savais que cette route était un peu hacky et fragile. J'essayais de créer une méthode rapide et réutilisable pour saisir des parties de la page pour l'impression. –

+0

Je vais utiliser une autre méthode qui fonctionnera, juste avec plus de codage manuel de html. –

Questions connexes