我创建一个Page对象并添加控制到它用于打印目的。代码工作,但我不能找到一种方法,样式表链接添加到头部。在代码我粘贴我试图将链接添加到报头,然后添加报头控制到页面,但是这将导致错误:

请求是在此上下文中可用的 System.Web.UI.Page.get_Request()8700216 System.Web.UI.HtmlControls.HtmlHead.RenderChildren(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
有帮助吗?

解决方案

您真的不能动态的方式,你想创建一个页面。所有你正在做的是创建Page对象,但是你有没有通过ASP.net管道做了。

这意味着页面对象没有被设置为IHttpHandler为请求(并且因此没有被交给含有HttpApplication所有的上下文对象需要,像RequestResponse),和调用任何页面生命周期方法(如RenderControl)将要失败。

ASP.Net Web表单没有呈现页面为一个字符串的简单方法。创建“独立的”页对象,并增加它的控制会很遗憾不会导致你很远。如果你真的需要在页面生命周期由于某种原因之外渲染控制,你可以通过的加载和渲染的.ascx文件,但这可能不适合你的需求是动态的,就够了。

我可以问你想从这些控件得到HTML做什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top