当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

ASP.NET用MasterPage代替PageBase技巧

目的:
        实现用MasterPage中的.cs文件 代替项目中的PageBase。动机:       
        写这篇文章的动机,来自于一次项目重构。在.Net Framwork 2.0的B/S架构项目中同时采用PageBase和MasterPage技术,发现每次访问页面,页面同时访问PageBase和MasterPage,不仅造成性能降低,甚至有可能给日后的项目功能扩充和调整带来逻辑错误隐患。技术环节:

        PageBase:.Net Framework 1.1 中经常使用的一种封装多个页面相同功能的技术。PageBase.cs类继续自System.Web.UI.Page类,项目中的Web页面继续自PageBase.cs类,通过重写基类中的页面初始化方法,实现调用PageBase中的业务功能,例如:url参数验证,保存访问量等功能(具体实现方式参见微软官方例子duwamishi)。

        MasterPage:.Net Framework 2.0 中新特性,物理上包括两个文件,分别是:.Master文件(Html标记),.cs文件(C#代码)。.Master文件实现显示层绘制,.cs文件实现具体功能。继续自MasterPage的Web页面可以继续MasterPage中的显示层内容。绘制通用的页头页脚,定制统一的布局,MasterPage是不错的选择。模拟需求:

       用MasterPage技术,代替PageBase,实现地址栏参数验证。
简单的做个解释吧      

登录系统之后,url地址栏中带有参数,如下:
http://localhost:3730/MasterPageBaseDemo/TestPage.aspx?id=1001
此时用户手动修改url地址栏中参数为:
http://localhost:3730/MasterPageBaseDemo/TestPage.aspx?id=1002
被视为非法操作,系统将自动跳转回登录页面。
第一次代码迭代:
1.参照传统PageBase方法:
        传统的Page做法为:
public class PageBase : System.Web.UI.Page
{   
    public PageBase()
    {
    }
    /**//// <summary>
    /// 入口方法
    /// </summary>
    protected void Initialize()
    {
        // 插入通用业务逻辑
     }
}
        Web页面:
public partial class TestPage : PageBase
{
    // 传统的调用PageBase的方法    
    /**///// <summary>
    /// 重写基类OnPreInit() 方法,调用通用验证方法
    /// </summary>
    /// <param name="e"></param>
    protected override void OnInit(eventargs e)
    {
        base.Initialize();
    }
}
参照其做法,将PageBase中的代码移入MasterPage中:
MasterPage.cs:
public partial class MyMasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            // 调用验证方法
            Initialize();
        }
    }
}
将Web页面中的代码修改为:
public partial class TestPage : System.Web.UI.Page
{   
    // 仿照PageBase方法,调用Master中的方法 
    /**//// <summary>
    /// 重写基类OnPreInit() 方法,调用通用验证方法
    /// </summary>
    /// <param name="e"></param>
    protected override void OnInit(eventargs e)
    {       
        // 获得母板页引用
        MyMasterPage myMasterPage = (MyMasterPage)this.Master;
        // 调用母板页中通用验证方法
        if (!IsPostBack)
        {
            myMasterPage.Initialize();
        }
    }
}将MasterPage中的Initialize()方法替换为实例中的,测试代码:
        步骤1:用 用户名zhangsan登录系统,登录成功,
                      页面显示 欢迎 zhangsan 登录。
                      url地址显示:
                      http://localhost:3730/MasterPageBaseDemo/TestPage.aspx?id=1001
        步骤2:手动修改url地址栏:如下:
                      http://localhost:3730/MasterPageBaseDemo/TestPage.aspx?id=1002
        页面不会显示 欢迎lisi登录,而是跳转回登录页面。

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接