動態加入UserControl或ServerControl或一般Html

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