繁体   English   中英

从ascx.cs动态将文档类型添加到aspx页面

[英]Add doctype to an aspx page dynamically from ascx.cs

是否可以从ascx页面文件背后的代码中将<!DOCTYPE HTML>添加到aspx页面? 不能将文档类型添加到母版页,因为它会破坏其余的共享点站点。

我试图重写render方法:

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

但显然没有帮助。

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

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

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

然后从代码背后:

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

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

由于使用的是共享点,因此可以在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之前设置了config标志,当在doc type控件上触发render时,它将存在。

例如

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


<XYZ:DynamicDocTypeControl />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM