Pergunta

Eu escrevi uma página (apenas classe que deriva de System.web.ui.page, que quero usar em mais sites. Adicionei dinamicamente a coleção WebControls à página.Controls como esta:

Panel p = new Panel();
p.Style.Add("float", "left");
p.Controls.Add(locLT);
Page.Controls.Add(p);

Este código renderiza apenas

<div style="float:left;">
</div>

Como posso adicionar HTML, cabeçalho e seção do corpo sem escrever manualmente isso? É possível?

Foi útil?

Solução

Eu recomendo o MasterPages, mas você pode fazer isso:

public class CustomBase : System.Web.UI.Page  
{    
    protected override void Render( System.Web.UI.HtmlTextWriter textWriter ) 
    {
        using (System.IO.StringWriter stringWriter = new System.IO.StringWriter())
        {
             using (HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter))
             {    
                 LiteralControl header =new LiteralControl();
                 header.Text = RenderHeader(); // implement HTML HEAD BODY...etc

                 LiteralControl footer = new LiteralControl();
                 footer.Text = RenderFooter(); // implement CLOSE BODY HTML...etc

                 this.Controls.AddAt(0, header); //top
                 this.Controls.Add(footer); //bottom

                 base.Render(htmlWriter); 
             }
        }

        textWriter.Write(stringWriter.ToString());
    }       

}

Outras dicas

Não acredito que haja alguma maneira de gerar automaticamente as tags, mas você pode criar seu próprio método de renderização que gera a estrutura básica HTML necessária.

Antes de usar o MasterPages, uma maneira comum de adicionar cabeçalho e rodapé para uma página era herdar de um BasePage como http://gist.github.com/214437 e a partir do cabeçalho da carga da BasePage e dos controles de rodapé. Eu acho que uma página principal é uma escolha melhor para você do que para a seleção de base acima. Uma das desvantagens com uma página principal é que você deve adicionar o ASP: o conteúdo em todas as páginas, mas ainda é melhor do que a maneira antiga.

Se a sua "página" é completamente dinâmica e não tiver front-end ASPX (eu não percebi que isso era possível?!) ... então o que você realmente quer é provavelmente um httphandler personalizado, em vez de herdar da página.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top