从ascx.cs向aspx页面动态添加doctype

本文关键字:动态 添加 doctype aspx ascx cs | 更新日期: 2023-09-27 18:27:36

是否可以将<!DOCTYPE HTML>从ascx页面的代码隐藏文件添加到aspx页面?将doctype添加到母版页不是一个选项,因为它会破坏我们的其他sharepoint网站。

我试图覆盖渲染方法:

protected override void Render(HtmlTextWriter writer)
{
    StringBuilder sb = new StringBuilder("<!DOCTYPE HTML>");
    HtmlTextWriter textWriter = new HtmlTextWriter(new System.IO.StringWriter(sb));
    //base.Render(writer);
    base.Render(textWriter);
    writer.Write(sb.ToString());  
}

但显然没有帮助。

从ascx.cs向aspx页面动态添加doctype

对我来说,它是这样工作的:

首先,我在页面顶部的第一行<Form runat="server":之外添加了一个文字

<asp:Literal runat="server" ID="litHTMLSchema"></asp:Literal>

然后从代码后面:

// HTML 5
litHTMLSchema.Text = @"<!DOCTYPE html>" + Environment.NewLine + @"<html>";

我不认为这是最好的方法,但它没有任何问题。

由于您使用的是sharepoint,因此可以在WSP Package Farm解决方案中的代码中创建自定义Web控件。

  1. 创建一个名为DynamicDocTypeControl 的类

    public class DynamicDocTypeControl : System.Web.UI.WebControl *(check namespace  for typos)
    {
        override Render(...) {
            //add some conditional logic here for your dynamicness...
            writer.Write("<!DOCTYPE HTML>");
        }
    }
    
  2. 向项目中添加一个空的sharepoint元素,然后转到属性窗口,使用属性窗口中的安全控件部分将控件注册为安全控件。

  3. 构建/打包wsp并将其部署到服务器场。

然后在sharepoint设计器中编辑母版页,并将控件放在应该呈现doctype的位置。

把它放在母版页中不会破坏你的网站,因为如果它不在允许的页面上,你可以让你的渲染逻辑不渲染任何东西。

只要在aspx页面上有一些代码,设置一个HttpContext.Current.Item…值,doctype控件将查找该值以确定是否应该呈现该值。只要您的aspx页面在调用Render之前设置了配置标志,当Render在文档类型控件上启动时,它就会出现。

例如

<@ Register TagPrefix="XYZ" Namespace="XYZ.Controls" Assembly="XYZ... (include fully qualified assembly name)" />

<XYZ:DynamicDocTypeControl />