Adicione o link da folha de estilo ao objeto de página criada dinamicamente
-
26-09-2019 - |
Pergunta
Estou criando um objeto de página e adicionando um controle a ele para fins de impressão. O código funciona, no entanto, não consigo encontrar uma maneira de adicionar um link de folha de estilo ao cabeçalho. No código que colei, estou tentando adicionar um link ao cabeçalho e depois adicionar o controle do cabeçalho à página, mas isso causa um erro:
A solicitação não está disponível neste contexto System.web.ui.page.get_request () +8700216 System.web.ui.htmlcontrols.htmlhead.renderchildren (escritor 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
Solução
Você realmente não pode criar uma página dinamicamente da maneira que está pensando. Tudo o que você está fazendo é criar o objeto da página, mas você não o fez através do pipeline do ASP.NET.
Isso significa que o objeto da página não foi definido como o IHttpHandler
para o pedido (e consequentemente não recebeu um HttpApplication
contendo todos os objetos de contexto de que precisa, como Request
e Response
) e chamando qualquer um dos métodos do ciclo de vida da página (como RenderControl
) vão falhar.
O ASP.NET WebForms não tem uma maneira fácil de renderizar uma página em uma string. Criar um objeto de página "não ligado" e adicionar controles a ele, infelizmente, não o levará muito longe. Se você realmente precisa renderizar controles fora do ciclo de vida da página por algum motivo, você poderá fazer isso por Carregando e renderizando arquivos .ascx, mas isso pode não ser dinâmico o suficiente para suas necessidades.
Posso perguntar o que você está tentando fazer obtendo o HTML desses controles?