ASP.NET模板基本的实现方法
创始人
2024-04-25 08:40:47
0

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这个基类,下面给出自定类的代码:

  1. PageBase.cs  
  2. publicclassPageBase:System.Web.UI.Page  
  3. {  
  4. publicstringPageTitle="测试模板";  
  5. protectedoverridevoidRender(System.Web.UI.HtmlTextWriterwriter)  
  6. {  
  7. writer.Write(@" 
  8. <metahttp-equivmetahttp-equiv='Content-Type'content='text/html;charset=gb2312'> 
  9. </FONT></STRONG>"+this.PageTitle+"<STRONG><FONT color=#006699>");  
  10. writer.Write(@" 
  11. <tablebordertableborder='0'width='680'> 
  12.  
  13. <tdwidthtdwidth='160'bgcolor='#006699'align='center'><fontcolorfontcolor='
    #FFFFFF'
    ><ahrefahref='index.aspx'>首页 
  14. <tdcolspantdcolspan='2'width='520'>广告条 
  15.  
  16.  
  17. <tdwidthtdwidth='160'valign='top'> 
  18. 导航

     
  19. <ahrefahref='newContact.aspx'>添加联系人

     
  20. 查找联系人

     
  21.  
  22. <tdwidthtdwidth='10'>  
  23. <tdwidthtdwidth='510'> 
  24. ");  
  25. base.Render(writer);  
  26. writer.Write(@"<tdwidthtdwidth='100%'colspan='3'>
    页脚");  
  27. }  

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

  1. Index.aspx  
  2.  
  3. <%@Pagelanguage="c#"Codebehind="index.aspx.cs"AutoEventWireup=
    "false"Inherits="wab.index"%> 
  4. <formidformid="index"method="post"runat="server"> 
  5. <asp:DataGrididasp:DataGridid="contacts"runat="server"Width=
    "492px"Height="104px"> 
  6.  
  7. index.aspx.cs(继承自定义类PageBase)  
  8. publicclassindex:PageBase  
  9. {  
  10. protectedSystem.Web.UI.WebControls.DataGridcontacts;  
  11. privatevoidPage_Load(objectsender,System.EventArgse)  
  12. {  
  13. //在此处放置用户代码以初始化页面  
  14. }  
  15. #regionWebFormDesignergeneratedcode  
  16. overrideprotectedvoidOnInit(EventArgse)  
  17. {  
  18. //  
  19. //CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。  
  20. //  
  21. InitializeComponent();  
  22. base.OnInit(e);  
  23. }  
  24. /// 
  25. ///设计器支持所需的方法-不要使用代码编辑器修改  
  26. ///此方法的内容。  
  27. ///
  28.  
  29. privatevoidInitializeComponent()  
  30. {  
  31. this.Load+=newSystem.EventHandler(this.Page_Load);  
  32. }  
  33. #endregion  
  34. }  
  35. newContact.aspx  
  36. <%@Pagelanguage="c#"Codebehind="newContact.aspx.cs"AutoEventWireup=
    "false"Inherits="wab.newContact"%> 
  37. <formidformid="newContact"method="post"runat="server"> 
  38. <FONTfaceFONTface="宋体">名子 

  39. <asp:TextBoxidasp:TextBoxid="TextBox1"runat="server">

     
  40. <FONTfaceFONTface="宋体">姓氏 

  41. <asp:TextBoxidasp:TextBoxid="TextBox2"runat="server">

     
  42.  

  43. <asp:Buttonidasp:Buttonid="Button1"runat="server"Text="Button">

     
  44.  
  45. newContact.aspx.cs(继承自定类PageBase)  
  46. publicclassnewContact:PageBase  
  47. {  
  48. protectedSystem.Web.UI.WebControls.TextBoxTextBox1;  
  49. protectedSystem.Web.UI.WebControls.ButtonButton1;  
  50. protectedSystem.Web.UI.WebControls.TextBoxTextBox2;  
  51. privatevoidPage_Load(objectsender,System.EventArgse)  
  52. {  
  53. }  
  54. #regionWebFormDesignergeneratedcode  
  55. overrideprotectedvoidOnInit(EventArgse)  
  56. {  
  57. //  
  58. //CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的  
  59. //  
  60. InitializeComponent();  
  61. base.OnInit(e);  
  62. }  
  63. /// 
  64. ///设计器支持所需的方法-不要使用代码编辑器修改  
  65. ///此方法的内容。  
  66. ///
  67.  
  68. privatevoidInitializeComponent()  
  69. {  
  70. this.Load+=newSystem.EventHandler(this.Page_Load)  
  71. }  
  72. #endregion  

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

【编辑推荐】

  1. ASP.NET开发技巧之Theme功能浅析
  2. 详解ASP.NET动态编译
  3. Apache支持ASP.NET方法浅析
  4. 浅谈ASP.NET服务器标准控件
  5. ASP.NET中SQL Server数据库备份恢复浅析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...