动态修改页面的DOCTYPE及一个小发现

    在实现新的Skin-Paperclip的时候,页面DOCTYPE需要使用:    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    可其他的Skin使用的都是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    而所有的Skin都是通过一个default.aspx以控件的方式加载的,如果改了default.aspx的DOCTYPE,其他Skin的页面显示就会受影响,只能根据不同的Skin显示不同的DOCTYPE,我想到了一个方法,重载Render方法,在页面Render之前输出所需的DOCTYPE,代码如下:
    先删除default.aspx中的DOCTYPE代码。
protected override void Render(HtmlTextWriter writer)
        {
            
if (!IsPostBack)
            {
                
if(CurrentBlog.Skin.IsXHTML)
                {
                    writer.Write(
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">");
                }
                
else
                {
                    writer.Write(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
                }
            }
            
base.Render(writer);
        }
    通过上面的代码实现后,有一个小发现。
    不知你有没有注意到,在ASP.NET中,通过.aspx文件显示的页面第一行都是空行(为什么显示空行,需要研究一下相应的源代码才能知道),而使用上面的方法,第一行就没有空行了。
原文地址:https://www.cnblogs.com/dudu/p/641310.html