我正在创建一个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
答案 0 :(得分:1)
您实际上无法以您正在思考的方式动态创建页面。您所做的只是创建Page对象,但您还没有通过ASP.net管道完成它。
这意味着Page对象尚未被设置为请求的IHttpHandler
(因此没有传递包含所需的所有上下文对象的HttpApplication
,如{{1 }和Request
),并且调用任何页面生命周期方法(如Response
)都将失败。
ASP.Net webforms没有一种简单的方法将页面呈现为字符串。不幸的是,创建一个“未附加的”页面对象并向其添加控件将不会引导您走得太远。如果您确实需要在页面生命周期之外渲染控件出于某种原因,您可以通过loading and rendering .ascx files执行此操作,但这可能不够动态,无法满足您的需求。
我可以通过从这些控件中获取HTML来询问您要做什么吗?