动态生成的ASP.NET页面没有基本的html结构

时间:2009-10-20 16:52:14

标签: c# asp.net dynamically-generated

我写了一个页面(只有派生自 System.Web.UI.Page 的类,我想在更多网站中使用。我动态地将webcontrols添加到Page.Controls集合中,如下所示:< / p>

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 个答案:

答案 0 :(得分: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());
    }       

}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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