ASP.NET模板基本的实现方法

开发 后端
本文介绍ASP.NET模板基本的实现方法,我们常常使用Façade这个模式降低系统的耦合度,而我们又为什么要使用设计模式呢?主要是用来减小耦合提高复用的。

ASP.NET模板基本的实现方法

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

发展

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

实现

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

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

我们加入的一个中间层,该自定类继承System.Web.UI.Page这个基类,下面给出自定类的代码:

PageBase.cs  
publicclassPageBase:System.Web.UI.Page  
{  
publicstringPageTitle="测试模板";  
protectedoverridevoidRender(System.Web.UI.HtmlTextWriterwriter)  
{  
writer.Write(@"<html><head> 
<metahttp-equivmetahttp-equiv='Content-Type'content='text/html;charset=gb2312'> 
<title>"+this.PageTitle+"</title></head>");  
writer.Write(@"<body> 
<tablebordertableborder='0'width='680'> 
<tr> 
<tdwidthtdwidth='160'bgcolor='#006699'align='center'><fontcolorfontcolor='
#FFFFFF'
><b><ahrefahref='index.aspx'>首页</a></b></font></td>  <tdcolspantdcolspan='2'width='520'>广告条</td>  </tr>  <tr>  <tdwidthtdwidth='160'valign='top'>  <p>导航</p>  <p><ahrefahref='newContact.aspx'>添加联系人</a></p>  <p>查找联系人</p>  </tr>  <tdwidthtdwidth='10'> </td>  <tdwidthtdwidth='510'>  ");   base.Render(writer);   writer.Write(@"</td></tr><tr><tdwidthtdwidth='100%'colspan='3'>
页脚</td></tr></table></body></html>");   }  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

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

Index.aspx  
 
<%@Pagelanguage="c#"Codebehind="index.aspx.cs"AutoEventWireup=
"false"
Inherits="wab.index"%>  <formidformid="index"method="post"runat="server">  <asp:DataGrididasp:DataGridid="contacts"runat="server"Width=
"492px"
Height="104px"></asp:DataGrid>  </form>  index.aspx.cs(继承自定义类PageBase)   publicclassindex:PageBase   {   protectedSystem.Web.UI.WebControls.DataGridcontacts;   privatevoidPage_Load(objectsender,System.EventArgse)   {   //在此处放置用户代码以初始化页面   }   #regionWebFormDesignergeneratedcode   overrideprotectedvoidOnInit(EventArgse)   {   //   //CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。   //   InitializeComponent();   base.OnInit(e);   }   ///<summary>  ///设计器支持所需的方法-不要使用代码编辑器修改   ///此方法的内容。   ///</summary>  privatevoidInitializeComponent()   {   this.Load+=newSystem.EventHandler(this.Page_Load);   }   #endregion   }   newContact.aspx   <%@Pagelanguage="c#"Codebehind="newContact.aspx.cs"AutoEventWireup=
"false"
Inherits="wab.newContact"%>  <formidformid="newContact"method="post"runat="server">  <P><FONTfaceFONTface="宋体">名子</FONT>  <asp:TextBoxidasp:TextBoxid="TextBox1"runat="server"></asp:TextBox></P>  <P><FONTfaceFONTface="宋体">姓氏</FONT>  <asp:TextBoxidasp:TextBoxid="TextBox2"runat="server"></asp:TextBox></P>  <P>  <asp:Buttonidasp:Buttonid="Button1"runat="server"Text="Button">
</asp:Button></P>
  </form>  newContact.aspx.cs(继承自定类PageBase)   publicclassnewContact:PageBase   {   protectedSystem.Web.UI.WebControls.TextBoxTextBox1;   protectedSystem.Web.UI.WebControls.ButtonButton1;   protectedSystem.Web.UI.WebControls.TextBoxTextBox2;   privatevoidPage_Load(objectsender,System.EventArgse)   {   }   #regionWebFormDesignergeneratedcode   overrideprotectedvoidOnInit(EventArgse)   {   //   //CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的   //   InitializeComponent();   base.OnInit(e);   }   ///<summary>  ///设计器支持所需的方法-不要使用代码编辑器修改   ///此方法的内容。   ///</summary>  privatevoidInitializeComponent()   {   this.Load+=newSystem.EventHandler(this.Page_Load)   }   #endregion  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.

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

【编辑推荐】

  1. ASP.NET开发技巧之Theme功能浅析
  2. 详解ASP.NET动态编译
  3. Apache支持ASP.NET方法浅析
  4. 浅谈ASP.NET服务器标准控件
  5. ASP.NET中SQL Server数据库备份恢复浅析
责任编辑:佚名 来源: 赛迪网
相关推荐

2012-05-04 15:54:16

ASP.NET

2009-01-04 13:27:10

URL RewriteIISASP.NET

2009-07-28 13:26:34

Render方法ASP.NET

2009-09-10 09:50:47

ASP.NET MVC

2009-08-07 15:24:16

ASP.NET模板控件

2009-07-24 10:53:51

ASP.NET实现静态

2009-07-22 09:11:02

Action方法ASP.NET MVC

2009-07-20 16:04:37

ASP.NET fra

2009-07-27 16:30:49

母版资源ASP.NET网页模板

2009-08-04 12:59:42

ASP.NET控件开发

2009-07-20 15:44:32

ASP.NET MVC

2009-10-09 10:52:43

ASP.NET模板引擎

2009-07-22 17:45:11

ASP.NET插件

2009-07-22 14:28:43

学习ASP.NET MASP.NET MVC

2009-07-28 17:17:19

ASP.NET概述

2009-08-03 14:22:33

什么是ASP.NET

2009-07-29 16:47:40

ASP.NET表单身份

2009-07-23 15:11:43

XML Web服务方法ASP.NET

2009-07-22 17:45:35

ASP.NET教程

2009-07-21 09:43:36

调用UpdatePanASP.NET
点赞
收藏

51CTO技术栈公众号