动态修改页面的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文件显示的页面第一行都是空行(为什么显示空行,需要研究一下相应的源代码才能知道),而使用上面的方法,第一行就没有空行了。

你可能感兴趣的:(DOCTYPE)