溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

ASP.NET怎么實(shí)現(xiàn)模板

發(fā)布時(shí)間:2021-07-15 14:28:14 來(lái)源:億速云 閱讀:139 作者:chen 欄目:編程語(yǔ)言

這篇文章主要講解了“ASP.NET怎么實(shí)現(xiàn)模板”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“ASP.NET怎么實(shí)現(xiàn)模板”吧!

ASP.NET模板基本的實(shí)現(xiàn)方法

在以前(或許現(xiàn)在),當(dāng)我們?cè)谧鯳EB項(xiàng)目的時(shí)候,常常會(huì)用到一些共用文件,比如整頁(yè)的頂部(頁(yè)眉),左部(導(dǎo)航),底部(頁(yè)腳)等等一些共用的HTML,ASP等文件,即便如此,我們也需要預(yù)先為這些文件做好框架的樣式(一般是用table吧?!沒(méi)幾個(gè)會(huì)用DIV吧),以組合(include)這些文件得到一個(gè)完整的頁(yè)面,這些共用文件的組合,這里假設(shè)把它定義成模板(盡管模板的真正含義可能遠(yuǎn)不止此)。即便如此,當(dāng)我們項(xiàng)目中整個(gè)框架發(fā)生變動(dòng)時(shí),我們不得修改原先通過(guò)table等等一些HTML標(biāo)簽定義好的每個(gè)需要這樣模板的頁(yè)面,而這樣的工作盡管可以通過(guò)ctrl+c和ctrl+v來(lái)完成,但同時(shí)工作量也是巨大的,耗時(shí)的。一下是ASP.NET模板基本的實(shí)現(xiàn)方法

發(fā)展

在ASP.NET里,使用的是面向?qū)ο蟮拈_(kāi)發(fā)模式,可以這么理解---每個(gè)頁(yè)面都是一個(gè)從SystemWeb.UI.Page繼承的Class,這個(gè)類(lèi)給我們提供了一些諸如緩存,表示,應(yīng)答,請(qǐng)求等服務(wù)(說(shuō)是方法也行)。通過(guò)面向?qū)ο蟮姆椒ㄊ遣皇怯斜扔胕nclude更好的解決方法呢?當(dāng)然,答案是肯定的。

實(shí)現(xiàn)

記得有句名言叫“任何問(wèn)題都可以通過(guò)加入一個(gè)中間層來(lái)實(shí)現(xiàn)”,舉個(gè)很簡(jiǎn)單的例子,我們常常使用Façade這個(gè)模式降低系統(tǒng)的耦合度,而我們又為什么要使用設(shè)計(jì)模式呢?主要是用來(lái)減小耦合提高復(fù)用的。

從所有的ASPX頁(yè)面都由SystemWeb.UI.Page繼承而來(lái)這點(diǎn)上來(lái)看,我們只需在ASPX和SystemWeb.UI.Page之間加入一層,寫(xiě)一個(gè)我們自己的Class就可以使問(wèn)題變得簡(jiǎn)單化,而在.NET框架中,允許用戶(hù)自定義HTML代碼(這點(diǎn)可以參考Web User Controls),這樣解決問(wèn)題的雛形就出來(lái)了。

我們加入的一個(gè)中間層,該自定類(lèi)繼承System.Web.UI.Page這個(gè)基類(lèi),下面給出自定類(lèi)的代碼:

  1. PageBase.cs  

  2. publicclassPageBase:System.Web.UI.Page  

  3. {  

  4. publicstringPageTitle="測(cè)試模板";  

  5. protectedoverridevoidRender(System.Web.UI.HtmlTextWriterwriter)  

  6. {  

  7. writer.Write(@"<html><head> 

  8. <metahttp-equivmetahttp-equiv='Content-Type'content='text/html;charset=gb2312'> 

  9. <title>"+this.PageTitle+"</title></head>");  

  10. writer.Write(@"<body> 

  11. <tablebordertableborder='0'width='680'> 

  12. <tr> 

  13. <tdwidthtdwidth='160'bgcolor='#006699'align='center'><fontcolorfontcolor='
    #FFFFFF'
    ><b><ahrefahref='index.aspx'>首頁(yè)</a></b></font></td> 

  14. <tdcolspantdcolspan='2'width='520'>廣告條</td> 

  15. </tr> 

  16. <tr> 

  17. <tdwidthtdwidth='160'valign='top'> 

  18. <p>導(dǎo)航</p> 

  19. <p><ahrefahref='newContact.aspx'>添加聯(lián)系人</a></p> 

  20. <p>查找聯(lián)系人</p> 

  21. </tr> 

  22. <tdwidthtdwidth='10'> </td> 

  23. <tdwidthtdwidth='510'> 

  24. ");  

  25. base.Render(writer);  

  26. writer.Write(@"</td></tr><tr><tdwidthtdwidth='100%'colspan='3'>
    頁(yè)腳</td></tr></table></body></html>");  

  27. }  

上面的PageBase.cs就是我們的自定類(lèi),這樣,我們?cè)谄渌鸄SPX頁(yè)面中就可以直接繼承PageBase這個(gè)類(lèi),而非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"></asp:DataGrid> 

  6. </form> 

  7. index.aspx.cs(繼承自定義類(lèi)PageBase)  

  8. publicclassindex:PageBase  

  9. {  

  10. protectedSystem.Web.UI.WebControls.DataGridcontacts;  

  11. privatevoidPage_Load(objectsender,System.EventArgse)  

  12. {  

  13. //在此處放置用戶(hù)代碼以初始化頁(yè)面  

  14. }  

  15. #regionWebFormDesignergeneratedcode  

  16. overrideprotectedvoidOnInit(EventArgse)  

  17. {  

  18. //  

  19. //CODEGEN:該調(diào)用是ASP.NETWeb窗體設(shè)計(jì)器所必需的。  

  20. //  

  21. InitializeComponent();  

  22. base.OnInit(e);  

  23. }  

  24. ///<summary> 

  25. ///設(shè)計(jì)器支持所需的方法-不要使用代碼編輯器修改  

  26. ///此方法的內(nèi)容。  

  27. ///</summary> 

  28. privatevoidInitializeComponent()  

  29. {  

  30. this.Load+=newSystem.EventHandler(this.Page_Load);  

  31. }  

  32. #endregion  

  33. }  

  34. newContact.aspx  

  35. <%@Pagelanguage="c#"Codebehind="newContact.aspx.cs"AutoEventWireup=
    "false"Inherits="wab.newContact"%> 

  36. <formidformid="newContact"method="post"runat="server"> 

  37. <P><FONTfaceFONTface="宋體">名子</FONT> 

  38. <asp:TextBoxidasp:TextBoxid="TextBox1"runat="server"></asp:TextBox></P> 

  39. <P><FONTfaceFONTface="宋體">姓氏</FONT> 

  40. <asp:TextBoxidasp:TextBoxid="TextBox2"runat="server"></asp:TextBox></P> 

  41. <P> 

  42. <asp:Buttonidasp:Buttonid="Button1"runat="server"Text="Button">
    </asp:Button></P>
     

  43. </form> 

  44. newContact.aspx.cs(繼承自定類(lèi)PageBase)  

  45. publicclassnewContact:PageBase  

  46. {  

  47. protectedSystem.Web.UI.WebControls.TextBoxTextBox1;  

  48. protectedSystem.Web.UI.WebControls.ButtonButton1;  

  49. protectedSystem.Web.UI.WebControls.TextBoxTextBox2;  

  50. privatevoidPage_Load(objectsender,System.EventArgse)  

  51. {  

  52. }  

  53. #regionWebFormDesignergeneratedcode  

  54. overrideprotectedvoidOnInit(EventArgse)  

  55. {  

  56. //  

  57. //CODEGEN:該調(diào)用是ASP.NETWeb窗體設(shè)計(jì)器所必需的  

  58. //  

  59. InitializeComponent();  

  60. base.OnInit(e);  

  61. }  

  62. ///<summary> 

  63. ///設(shè)計(jì)器支持所需的方法-不要使用代碼編輯器修改  

  64. ///此方法的內(nèi)容。  

  65. ///</summary> 

  66. privatevoidInitializeComponent()  

  67. {  

  68. this.Load+=newSystem.EventHandler(this.Page_Load)  

  69. }  

  70. #endregion  

感謝各位的閱讀,以上就是“ASP.NET怎么實(shí)現(xiàn)模板”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)ASP.NET怎么實(shí)現(xiàn)模板這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI