摘要:動態加入UserControl或ServerControl或一般Html
今天好奇心一來,想研究如何動態載入Control
為的只是……不喜歡WebForm擺一堆的Tag或Control畫面。
試一試,又試出一些怪招
===============
首先,先做一個UserControl,這我就不多介紹。
接著到web.config設定UserControl的tag註冊
<pages> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add tagPrefix ="uc1" src="~/UserControl/UserControlPanel.ascx" tagName ="UserControlPanel"/> </controls> </pages>
然後建立一個頁面。
開始測試如何動態載入。
public partial class Control_UserControlAdd : System.Web.UI.Page { public Control_UserControlAdd() { this.PreInit += new EventHandler(Control_UserControlAdd_PreInit); } void Control_UserControlAdd_PreInit(object sender, EventArgs e) { Label lbl = new Label(); lbl.Text = "我是Label"; this.Panel1.Controls.Add(lbl); Control uc1 = LoadControl("~/UserControl/UserControlPanel.ascx"); this.Panel1.Controls.Add(new HtmlGenericControl("BR")); this.Panel1.Controls.Add(uc1); } protected void Page_Load(object sender, EventArgs e) { } }
拋出問題:
做一做有一種靈異事件,想直接使用userControl的Class名稱,但一直不知道他是屬於哪個命名空間。
但如果你在頁面上有該UserControl的標籤時,Class名稱就會被程式碼知道,若沒有,就不被程式碼知道。
所以我就無耐的使用LoadControl這種方法解決問題。
動態載入的好處是,我可以經由資料庫或設定檔或各種判斷,載入相對應的Control進來。
而不需要將一堆的Control硬塞在WebForm上。(為了這種需求而做這種研究)