将样式表链接添加到动态创建的页面对象

时间:2010-09-30 17:04:24

标签: asp.net controls page-lifecycle rendercontrol

我正在创建一个Page对象并为其添加控件以进行打印。代码工作,但我找不到添加样式表链接到标头的方法。在我粘贴的代码中,我正在尝试添加指向标题的链接,然后将标题控件添加到页面中,但这会导致错误:

请求在此上下文中不可用 System.Web.UI.Page.get_Request()+8700216 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

1 个答案:

答案 0 :(得分:1)

您实际上无法以您正在思考的方式动态创建页面。您所做的只是创建Page对象,但您还没有通过ASP.net管道完成它。

这意味着Page对象尚未被设置为请求的IHttpHandler(因此没有传递包含所需的所有上下文对象的HttpApplication,如{{1 }和Request),并且调用任何页面生命周期方法(如Response)都将失败。

ASP.Net webforms没有一种简单的方法将页面呈现为字符串。不幸的是,创建一个“未附加的”页面对象并向其添加控件将不会引导您走得太远。如果您确实需要在页面生命周期之外渲染控件出于某种原因,您可以通过loading and rendering .ascx files执行此操作,但这可能不够动态,无法满足您的需求。

我可以通过从这些控件中获取HTML来询问您要做什么吗?