ASP.NET的模板实现(c#) (转)

本文介绍了一种在ASP.NET中实现页面模板的方法,通过创建自定义类PageBase继承System.Web.UI.Page,实现页面头部、主体和底部等内容的统一管理,简化了页面布局的更新维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ASP.NET的模板实现(c#) (转)[@more@]

 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

前言

在以前(或许现在),当我们在做web项目的时候,常常会用到一些共用文件,比如整页的顶部(页眉),左部(导航),底部(页脚)等等一些共用的HTML,ASP等文件,即便如此,我们也需要预先为这些文件做好框架的样式(一般是用table吧?!没几个会用DIV吧),以组合(include)这些文件得到一个完整的页面,这些共用文件的组合,这里假设把它定义成模板(尽管模板的真正含义可能远不止此)。即便如此,当我们项目中整个框架发生变动时,我们不得修改原先通过table等等一些HTML标签定义好的每个需要这样模板的页面,而这样的工作尽管可以通过ctrl+c和ctrl+v来完成,但同时工作量也是巨大的,耗时的。

发展

  在ASP.NET里,使用的是面向对象的开发模式,可以这么理解---每个页面都是一个从SystemWeb.UI.Page继承的Class,这个类给我们提供了一些诸如缓存,表示,应答,请求等服务(说是方法也行)。通过面向对象的方法是不是有比用include更好的解决方法呢?当然,答案是肯定的。

实现

记得有句名言叫“任何问题都可以通过加入一个中间层来实现”,举个很简单的例子,我们常常使用Façade这个模式降低系统耦合度,而我们又为什么要使用设计模式呢?主要是用来减小耦合提高复用的。

从所有的aspx页面都由SystemWeb.UI.Page继承而来这点上来看,我们只需在ASPX和SystemWeb.UI.Page之间加入一层,写一个我们自己的Class就可以使问题变得简单化,而在.NET框架中,允许用户自定义HTML代码(这点可以参考Web User Controls),这样解决问题的雏形就出来了,见下图。

优快云_Dev_Image_a%20href=2003-8-9152120.png" o:title="">

 

图中的“自定义类”就相当于我们加入的一个中间层,该自定类继承System.Web.UI.Page这个基类,下面给出自定类的代码:

PageBase.cs

  public class PageBase:System.Web.UI.Page

  {

  public string PageTitle="测试模板";

  protected override void Render(System.Web.UI.HtmlTextWriter writer)

  {

  writer.Write(@"

 

 

" + this.PageTitle + "");

  writer.Write(@"

 

 

 

首页

 

广告条

 

 

 

 

导航

 

添加联系人

 

查找联系人

 

 

 

 

  ");

  base.Render(writer);

 

  writer.Write(@"

页脚 ");

 

  }

  }

上面的PageBase.cs就是我们的自定类,这样,我们在其他ASPX页面中就可以直接继承PageBase这个类,而非System.Web.UI.Page,下面分别是index.aspx和newContact.aspx的代码(分别包含index.aspx.cs和newContact.aspx.cs):

Index.aspx

C#" Codebehind="index.aspx.cs" AutoEventWireup="false" Inherits="wab.index" %>

RM id="index" method="post" runat="server">

 

index.aspx.cs(继承自定义类PageBase)

  public class index : PageBase

  {

  protected System.Web.UI.WebControls.DataGrid contacts;

 

  private void Page_Load(object sender, System.EventArgs e)

  {

  // 在此处放置用户代码以初始化页面

  }

  #region Web Form Designer generated code

  override protected void OnInit(EventArgs e)

  {

  //

  // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。

  //

  InitializeComponent();

  base.OnInit(e);

  }

 

  ///

  /// 设计器支持所需的方法 - 不要使用代码编辑器修改

  /// 此方法的内容。

  ///

  private void InitializeComponent()

  { 

  this.Load += new System.EventHandler(this.Page_Load);

 

  }

  #endregion

  }

newContact.aspx

 

名子

 

 

姓氏

 

 

 

newContact.aspx.cs(继承自定类PageBase)

  public class newContact : PageBase

  {

  protected System.Web.UI.WebControls.TextBox TextBox1;

  protected System.Web.UI.WebControls.Button Button1;

  protected System.Web.UI.WebControls.TextBox TextBox2;

 

  private void Page_Load(object sender, System.EventArgs e)

  {

  }

 

  #region Web Form Designer generated code

  override protected void OnInit(EventArgs e)

  {

  //

  // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。

  //

  InitializeComponent();

  base.OnInit(e);

  }

 

  ///

  /// 设计器支持所需的方法 - 不要使用代码编辑器修改

  /// 此方法的内容。

  ///

  private void InitializeComponent()

  { 

  this.Load += new System.EventHandler(this.Page_Load);

 

  }

  #endregion

  }

 

以上就是ASP.NET中模板基本的实现方法,不过在此先声明一点,这么做会让系统的性能下降一点点,但是这一点点并不影响实际项目,但我相信这一点点的系统性能换来的是日后维护的方便,相信很值得。

 

windows 2000 server + Visual Studio.net(.NET framework 1.0)下测试通过。

 

补充:文章中如有不到之处,请指正,以便即时改动。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-959590/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-959590/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值