動態(tài)加載用戶控件的組件!
發(fā)表時間:2023-08-18 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]我們寫用戶控件的目的就是放到頁面中去。根據(jù)不同的條件,我們可以改變加載的用戶控件!其實原理就是MasterPage的原理。這個MasterPage會在vs2005中提供,但是現(xiàn)在也可以實現(xiàn)。在我的項...
我們寫用戶控件的目的就是放到頁面中去。根據(jù)不同的條件,我們可以改變加載的用戶控件!
其實原理就是MasterPage的原理。這個MasterPage會在vs2005中提供,但是現(xiàn)在也可以實現(xiàn)。
在我的項目中就用到:
MasterPage就四個類,其中容器就動態(tài)加載用戶控件。這種功能在vs2005中將無處不在。
下面簡單介紹一下動態(tài)加載葉面組件:
我們只需要改變用戶組件的地址就可以動態(tài)改變加載的用戶組件了。
在程序中動態(tài)改變SkinPath就可以了。
組件源碼如下:
using System;
//using System.Drawing;
using System.Collections;
using System.Collections.Specialized;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.IO;
using System.Web.Security;
using Region.Components;
namespace Region.Controls {
[ParseChildren(true)]
/// <summary>
/// 頁面組件,從用戶組件獲取
/// </summary>
public abstract class SkinnedControl : WebControl, INamingContainer {
string skinFilename = null;
string skinName = null;
string skinPath;
// string returnURL = null;
/// <summary>
/// 添加子組件
/// </summary>
protected override void CreateChildControls() {
if(SkinPath == null SkinPath == "" SkinPath.Trim() == "")
return ;
Control skin;
skin = LoadSkin();
InitializeSkin(skin);
Controls.Add(skin);
}
/// <summary>
/// 獲取摸板組件
/// </summary>
/// <returns>組件</returns>
protected Control LoadSkin()
{
Control skin;
try
{
skin = Page.LoadControl(SkinPath);
}
catch (FileNotFoundException)
{
throw new Exception("找不到文件:[ " + SkinPath + " ] .");
}
return skin;
}
/// <summary>
/// 初始化組建摸板
/// </summary>
/// <param name="skin">組件</param>
protected abstract void InitializeSkin(Control skin);
/// <summary>
/// 用戶組件名稱
/// </summary>
public string SkinFilename
{
get
{
return skinFilename;
}
set
{
skinFilename = value;
}
}
/// <summary>
/// 組件名稱
/// </summary>
protected string SkinName
{
get
{
return skinName;
}
set
{
skinName = value;
}
}
/// <summary>
/// 用戶組件相對路徑及組件名稱
/// </summary>
public string SkinPath
{
get
{
return skinPath;
}
set
{
skinPath = value;
SkinFilename = value.TrimStart('/');
}
}
}
}
比如我的一個應用:
switch (context.PageId)
{
case "1_1" :
base.SkinPath = "~/Themes/SignManager/TermList.ascx";
break ;
case "1_1_1" :
base.SkinPath = "~/Themes/SignManager/TermEdit.ascx";
break ;
case "1_2" :
base.SkinPath = "~/Themes/SignManager/MemberList.ascx";
break ;
case "1_2_1" :
base.SkinPath = "~/Themes/SignManager/MemberEdit.ascx";
break ;
case "2_1" :
base.SkinPath = "~/Themes/SignManager/CardSend.ascx";
break ;
case "3_1" :
base.SkinPath = "~/Themes/SignManager/MemberNoEdit.ascx";
break ;
case "4_1" :
base.SkinPath = "~/Themes/AcountEdit.ascx";
break ;
default :
base.SkinPath = "";
break;
}
基于組建的開發(fā),我們可省去葉面上很多重復性的地方。只需在重復葉面的地方引用組件就可以了
比如:
這樣我們就可以 以用戶組件為元素,組件不同的葉面。葉面也可以重用!