[ASP.NET]取得WebControl的Html字串

[ASP.NET]取得WebControl的Html字串

有朋友在問如何取得WebControl的Html字串

WebControl.RenderControl 方法 接收一個HtmlTextWriter型別的參數,

所以可以傳給HtmlTextWriter一個StringWriter,這樣就可以取得WebControl的Html字串了,如下我取得WebPage中DropDownList1控制項的Html字串,

{
	using (HtmlTextWriter htw = new HtmlTextWriter(sw))
	{
		DropDownList1.RenderControl(htw);
	}
	string html = sw.ToString();
}

 

另外,在呼叫 WebControl.RenderControl 方法 時,有可能會發生 「型別 'DropDownList' 的控制項 'DropDownList1' 必須置於有 runat=server 的表單標記之中。」 的錯誤,

那是因為在Control在Render時,會呼叫 Page.VerifyRenderingInServerForm 方法 檢查看看Control是否在 <form runat=server> 標記以內,

可以覆寫 VerifyRenderingInServerForm ,讓它不要檢查,如下,

{
	//避免 型別 'xxx' 的控制項 'xxx' 必須置於有 runat=server 的表單標記之中。 的錯誤
	//所以不要檢查
}

 

另外,如果出現「RegisterForEventValidation 只能在 Render(); 期間呼叫」的錯誤,請設定 EnableEventValidation="false" 。 如下,

<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" Trace="true" %>

 

參考資料

Getting the content of an ASP.NET System.Web.UI.WebControls.PlaceHolder

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^