簡體   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