2010-09-30 3 views
2

Я создаю объект страницы и добавляю к нему контроль для печати. Код работает, однако я не могу найти способ добавить ссылку на таблицу стилей в заголовок. В коде, который я вставил, я пытаюсь добавить ссылку на заголовок, а затем добавить элемент управления заголовком на страницу, но это вызывает ошибку:Добавить ссылку стилей для динамически созданного объекта страницы

Запрос не доступен в этом контексте 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 

ответ

1

вы действительно не можете создать страницу динамически таким образом, что вы думаете. Все, что вы делаете, это создание объекта «Страница», но вы не сделали этого через конвейер ASP.net.

Это означает, что объект страница не была установлена ​​в качестве IHttpHandler для запроса (и, следовательно, не был передан в HttpApplication, содержащий все объекты контекста он нуждается, как Request и Response), и вызов любой из методы жизненного цикла страницы (например, RenderControl) будут терпеть неудачу.

ASP.NET webforms не имеет простого способа отображения страницы в строку. Создание «непривязанного» объекта страницы и добавление элементов управления к нему, к сожалению, не приведет вас очень далеко. Если по какой-то причине вам действительно нужно визуализировать элементы управления за пределами жизненного цикла страницы, вы можете сделать это на loading and rendering .ascx files, но это может быть недостаточно динамичным для ваших нужд.

Могу ли я спросить, что вы пытаетесь сделать, получив HTML из этих элементов управления?

+0

Спасибо за ваш ответ womp. Я знал, что этот маршрут был довольно хакивым и хрупким. Я пытался создать быстрый, многоразовый метод для захвата частей страницы для печати. –

+0

Я собираюсь использовать другой метод, который будет работать, только с большим количеством кодирования html. –