从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());
}
但显然没有帮助。
对我来说,它是这样工作的:
首先,我在页面顶部的第一行<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控件。
-
创建一个名为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>"); } }
-
向项目中添加一个空的sharepoint元素,然后转到属性窗口,使用属性窗口中的安全控件部分将控件注册为安全控件。
-
构建/打包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 />