从ascx.cs动态地将doctype添加到aspx页面

时间:2014-10-22 13:32:50

标签: c# html asp.net sharepoint web-controls

是否可以从ascx页面的代码隐藏文件中将<!DOCTYPE HTML>添加到a​​spx页面? 将doctype添加到母版页不是一种选择,因为它会破坏我们的其他共享点网站。

我试图覆盖渲染方法:

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

但显然没有帮助。

2 个答案:

答案 0 :(得分:0)

对我而言,它的工作方式如下:

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

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

然后从代码隐藏:

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

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

答案 1 :(得分:0)

由于您使用的是sharepoint,因此可以在WSP Package Farm Solution中的代码中创建自定义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并将其部署到服务器场。

  4. 然后在sharepoint designer中编辑您的母版页,并将控件放在应该呈现doctype的位置。

    将它放在母版页中不会破坏您的网站,因为如果它不在允许的页面上,您可以使渲染逻辑不呈现任何内容。

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

    e.g。

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