动态加载用户控件的组件1
我们写用户控件的目的就是放到页面中去。根据不同的条件,我们可以改变加载的用户控件!
其实原理就是MasterPage的原理。这个MasterPage会在vs2005
中提供,但是现在也可以实现。
在我的项目中就用到:
MasterPage就四个类,其中容器就动态加载用户控件。这种功能在vs2005中将无处不在。
下面简单介绍一下动态加载叶面组件:
我们只需要改变用户组件的地址就可以动态改变加载的用户组件了。
在程序中动态改变SkinPath就可以了。
组件源码如下:
比如我的一个应用:
基于组建的开发,我们可省去叶面上很多重复性的地方。只需在重复叶面的地方引用组件就可以了
比如:
这样我们就可以 以用户组件为元素,组件不同的叶面。叶面也可以重用!
但是怎样灵活的在项目中运用呢?怎样做到面向组件的开发呢?就像是积木式开发,我们的叶面可以有不同的组件来完成,而整个叶面就是一
个容器,我们只不过是往容器里添加不同的元素而已,因此只要我们的元素能够做到通用,一般化,那么元素积累到了一定的程度,元素足够
的丰富就可以经而一举构造出我们想要得叶面。
更多地运用到下一篇文章再详细到来。下面我们先来看看怎么样加载组合我们的用户组件:
1、让我们来先做两个元素,这里我就把用户组件ascx的文件称之为元素了。Head.ascx和Footer.ascx.
2、作个aspx叶面来加载着两个元素。
3、运行的效果如下:
哈哈!是不是很激动人心呢?
好让我们来动态加载,让头脚换一下位置怎么样!我们在aspx叶面上加一个按钮,在按钮的相应事件里改变加载不同的用户组件。事件的代码
这样写:
运行之后:
赶快按下鼠标试试看
哈啊!是不是头脚换了位置了呢?
好!动态加载用户组件搞定。可以 Release 一下了。
那么这只是一个简单的应用,让我们期待下一篇文章再来领略动态加载组建的真正的应用。
相关文章
动态加载用户控件的组件2
动态加载用户控件的组件3
其实原理就是MasterPage的原理。这个MasterPage会在vs2005
中提供,但是现在也可以实现。
在我的项目中就用到:
MasterPage就四个类,其中容器就动态加载用户控件。这种功能在vs2005中将无处不在。
下面简单介绍一下动态加载叶面组件:
我们只需要改变用户组件的地址就可以动态改变加载的用户组件了。
在程序中动态改变SkinPath就可以了。
组件源码如下:
+展开
-C#
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('/');
}
}
}
}
//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('/');
}
}
}
}
比如我的一个应用:
+展开
-C#
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;
}
{
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;
}
基于组建的开发,我们可省去叶面上很多重复性的地方。只需在重复叶面的地方引用组件就可以了
比如:
这样我们就可以 以用户组件为元素,组件不同的叶面。叶面也可以重用!
但是怎样灵活的在项目中运用呢?怎样做到面向组件的开发呢?就像是积木式开发,我们的叶面可以有不同的组件来完成,而整个叶面就是一
个容器,我们只不过是往容器里添加不同的元素而已,因此只要我们的元素能够做到通用,一般化,那么元素积累到了一定的程度,元素足够
的丰富就可以经而一举构造出我们想要得叶面。
更多地运用到下一篇文章再详细到来。下面我们先来看看怎么样加载组合我们的用户组件:
1、让我们来先做两个元素,这里我就把用户组件ascx的文件称之为元素了。Head.ascx和Footer.ascx.
2、作个aspx叶面来加载着两个元素。
3、运行的效果如下:
哈哈!是不是很激动人心呢?
好让我们来动态加载,让头脚换一下位置怎么样!我们在aspx叶面上加一个按钮,在按钮的相应事件里改变加载不同的用户组件。事件的代码
这样写:
运行之后:
赶快按下鼠标试试看
哈啊!是不是头脚换了位置了呢?
好!动态加载用户组件搞定。可以 Release 一下了。
那么这只是一个简单的应用,让我们期待下一篇文章再来领略动态加载组建的真正的应用。
相关文章
动态加载用户控件的组件2
动态加载用户控件的组件3
加支付宝好友偷能量挖...