Ajouter un lien à l'objet stylesheet créé dynamiquement la page
-
26-09-2019 - |
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
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?