開發過Winform的人都曉得,Winform的畫面是可以繼承的,只要在父類別拉好UI並寫完對應的事件,接著繼承的子類別都可以直接享有父類別所有的UI與功能,這對開發來說是很省時省力的,但偏偏在ASP.NET上是沒有這樣的機制的,但我們一樣可以透過繼承的機制來達成類似的功能,但會比較麻煩一些,以下簡單介紹一下如何達成:
一般我們在撰寫維護程式時,新增、修改、刪除等基本功能是一定要具備的,我們如果不想要在每支程式中撰寫類似的Code,做法其實很多種,但今天既然我們講繼承,我就直接以繼承的作法來說明了,我們直接看Code,很簡單:
02 | using System.Collections.Generic; |
06 | using System.Web.UI.WebControls; |
08 | namespace WebApplication1 |
11 | public class BasePage : System.Web.UI.Page |
14 | protected System.Web.UI.WebControls.ImageButton btnAdd = new ImageButton(); |
15 | protected System.Web.UI.WebControls.ImageButton btnEdit = new ImageButton(); |
16 | protected System.Web.UI.WebControls.ImageButton btnDelete = new ImageButton(); |
18 | protected void InitializeComponent() |
21 | this .btnAdd.Click += new System.Web.UI.ImageClickEventHandler( this .btnAdd_Click); |
22 | this .btnEdit.Click += new System.Web.UI.ImageClickEventHandler( this .btnEdit_Click); |
23 | this .btnDelete.Click += new System.Web.UI.ImageClickEventHandler( this .btnDelete_Click); |
25 | this .Load += new System.EventHandler( this .Page_Load); |
28 | protected override void OnInit(EventArgs e) |
31 | InitializeComponent(); |
34 | protected virtual void Page_Load( object sender, System.EventArgs e) |
38 | btnEdit.ID = "btnEdit" ; |
39 | btnDelete.ID = "btnDelete" ; |
42 | btnAdd.ImageUrl = "BtnAdd.gif" ; |
43 | btnEdit.ImageUrl = "BtnEdit.gif" ; |
44 | btnDelete.ImageUrl = "BtnDelete.gif" ; |
47 | Page.FindControl( "ToolBar" ).Controls.Add(btnAdd); |
48 | Page.FindControl( "ToolBar" ).Controls.Add(btnEdit); |
49 | Page.FindControl( "ToolBar" ).Controls.Add(btnDelete); |
52 | protected void btnAdd_Click( object sender, System.Web.UI.ImageClickEventArgs e) |
54 | Response.Write( "執行新增動作!!" ); |
57 | protected void btnEdit_Click( object sender, System.Web.UI.ImageClickEventArgs e) |
59 | Response.Write( "執行修改動作!!" ); |
62 | protected void btnDelete_Click( object sender, System.Web.UI.ImageClickEventArgs e) |
64 | Response.Write( "執行刪除動作!!" ); |
在作法上有幾個重要步驟:
1.新增類別,並繼承Page類別
2.宣告對應的元件並賦與ID與圖檔路徑
3.註冊Event
4.撰寫Event細節
5.透過FindControl將元件加入到子類別中
由於BasePage是透過ToolBar這個元件來將其宣告的三個按鈕加入到子類別中,因此我們知道子類別除了要繼承BasePage外,應該也需要在畫面上拉一個ToolBar的Contrainer,如下所示,子類別對應的Default.aspx中我宣告了一個div,名稱叫做ToolBar,並切記一定要runat="server":
01 | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> |
10 | < form id = "form1" runat = "server" > |
11 | < div runat = "server" id = "ToolBar" /> |
子類別中我除了改掉繼承外,什麼也沒寫:
02 | using System.Collections.Generic; |
06 | using System.Web.UI.WebControls; |
09 | using Facebook.Session; |
12 | namespace WebApplication1 |
14 | public partial class _Default : BasePage |
16 | protected void Page_Load( object sender, EventArgs e) |
這樣就已經完成了簡單的頁面繼承功能囉,我們來驗證一下吧,開啟畫面會發現在我在BasePage宣告的三個按鈕加入到我的頁面上了:
按下新增:
按下修改:
按下刪除:
是不是很簡單,這樣就可以很簡單的透過繼承來完成ASP.NET的頁面繼承囉。