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模板基本的实现方法,不过在此先声明一点,这么做会让系统的性能下降一点点,但是这一点点并不影响实际项目,但我相信这一点点的系统性能换来的是日后维护的方便,相信很值得。
【编辑推荐】