摘要:動態加入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上。(為了這種需求而做這種研究)