2

我写了一个页面(仅派生自System.Web.UI.Page的类,我想在更多网站中使用它。我像这样动态地将 webcontrols 添加到 Page.Controls 集合中:

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

此代码仅呈现

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

如何在不手动编写的情况下添加 HTML、HEADER 和 BODY 部分?是否可以?

4

4 回答 4

1

我推荐 MasterPages,但你可以这样做:

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());
    }       

}
于 2009-10-21T00:16:39.623 回答
0

我不相信有任何方法可以自动生成标签,但是您可以创建自己的 Render 方法来输出所需的基本 HTML 框架。

于 2009-10-20T16:58:55.737 回答
0

在使用 MasterPages 之前,为页面添加页眉和页脚的常用方法是从像http://gist.github.com/214437这样的 BasePage 以及从 BasePage 加载页眉和页脚控件继承。我认为 MasterPage 比上面的 BasePage 更适合您。MasterPage 的缺点之一是您必须在每个页面上添加 asp:content,但它仍然比旧方法好。

于 2009-10-20T17:26:25.133 回答
0

如果您的“页面”是完全动态的并且没有 aspx 前端(我没有意识到这是可能的?!)......那么您真正想要的可能是自定义 HttpHandler 而不是从 Page 继承。

于 2009-10-20T23:37:44.983 回答