您的位置:首页 > 编程语言 > ASP

在asp.net 2.0中使用母版页和工厂方法模式

2007-06-27 16:46 453 查看
原文地址:http://www.codeproject.com/aspnet/MasterPagesASP.asp
[原文源码下载]

原文发布日期:2007.01.18
作者:ssaud
翻译:webabcd

介绍
这里我讲解如何充分发挥母版页的优势。关于母版页的优点有大量的文章进行说明,参看 http://www.odetocode.com/Articles/450.aspx 此文当然和那些文章不相同。有时,你会经常碰到这样的场景:相同的用户界面(GUI),但是不同的业务逻辑,如图所示。因此,你会考虑使用用户控件来保持各个页面的标准外观。但如果你听我说明一下如何使用工厂模式设计的母版页,你就会感觉酷毙了!这里我使用了带单击功能的表格(Grid)。
public abstract class Base
public class BIOrderMaster : Base
public class Factory
private Factory Factory = newFactory();
private Base currentObject;

public event GridSelectionChanged GridChanged;
public event SecondryGridSelectionChanged ChildGridChanged;

public string mainTitle
public Base myObject

在page init事件中,我们要求工厂得到合适的Base类型对象,属性myObject返回这个新创建的对象。这个属性在内容页使用,用于在Page Load事件中得到当前具体对象。还记得我们说过的事件的执行顺序吧。在page_init事件中,我们调用factory类getObject方法。如果我们把代码替换到page load事件中,我们就不能内容页得到它的引用,因为,内容页的page load事件在母版页的page load事件之前发生。

protected void Page_Init(object sender, System.EventArgs e)
protected void Page_Load(object sender, EventArgs e)

protected void GV_TitleCompany_SelectedIndexChanged(
object sender, EventArgs e)
public partial class Pages_Default : System.Web.UI.Page
{
privateBase Orders;

protectedvoid Page_Load(object sender, EventArgs e)
{
Pages_MasterGrid myMaster = (Pages_MasterGrid)this.Master;
myMaster.mainTitle = "Order Information";
Orders = myMaster.myObject;
}

protected void Page_Init(object sender, System.EventArgs e)
{
Pages_MasterGrid myMaster = (Pages_MasterGrid)this.Master;
myMaster.GridChanged += FillControls;
myMaster.ChildGridChanged += FillChildInfo;
}

protected void FillControls(object sender, MasterGridEventArgument e)
{
// Code
}

protected void FillChildInfo (object sender, DetailGridEventArgument e)
{
// Code
}
}

在page_init事件中,我们增加自定义事件的处理逻辑,这些自定义事件将由母版页的父表格和子表格调用,然后在page load事件中,我们通过公共属性给Page Title赋值,我们也设置母版页的currentObject。我们给GridChanged事件添加了FillControl函数,以及给ChildGridChanged事件添加了FillChildInfo函数,这些函数将填充Multiview控件中所包括的控件。全部代码请参见源码

结语
这就是所有的内容,我们已经完成了母版页和工厂模式。欢迎大家对此文做出修改和评论。谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: