[ASP.NET]實作Webform的畫面繼承

開發過Winform的人都曉得,Winform的畫面是可以繼承的,只要在父類別拉好UI並寫完對應的事件,接著繼承的子類別都可以直接享有父類別所有的UI與功能,這對開發來說是很省時省力的,但偏偏在ASP.NET上是沒有這樣的機制的,但我們一樣可以透過繼承的機制來達成類似的功能,但會比較麻煩一些,以下簡單介紹一下如何達成:

  • 建構父類別

一般我們在撰寫維護程式時,新增、修改、刪除等基本功能是一定要具備的,我們如果不想要在每支程式中撰寫類似的Code,做法其實很多種,但今天既然我們講繼承,我就直接以繼承的作法來說明了,我們直接看Code,很簡單:

01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Web;
05using System.Web.UI;
06using System.Web.UI.WebControls;
07  
08namespace WebApplication1
09{
10    //繼承Page
11    public class BasePage : System.Web.UI.Page
12    {
13        //因為是動態元件,所以要自己宣告元件
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();  //刪除
17  
18        protected void InitializeComponent()
19        {
20            //註冊EventHandler
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);
24            //註冊頁面載入時呼叫的事件
25            this.Load += new System.EventHandler(this.Page_Load);
26        }
27  
28        protected override void OnInit(EventArgs e)
29        {
30            base.OnInit(e);
31            InitializeComponent();
32        }
33  
34        protected virtual void Page_Load(object sender, System.EventArgs e)
35        {
36            //給ID
37            btnAdd.ID = "btnAdd";
38            btnEdit.ID = "btnEdit";
39            btnDelete.ID = "btnDelete";
40  
41            //指定圖檔
42            btnAdd.ImageUrl = "BtnAdd.gif";
43            btnEdit.ImageUrl = "BtnEdit.gif";
44            btnDelete.ImageUrl = "BtnDelete.gif";
45  
46            //加入到子類別
47            Page.FindControl("ToolBar").Controls.Add(btnAdd);
48            Page.FindControl("ToolBar").Controls.Add(btnEdit);
49            Page.FindControl("ToolBar").Controls.Add(btnDelete);
50        }
51  
52        protected void btnAdd_Click(object sender, System.Web.UI.ImageClickEventArgs e)
53        {
54            Response.Write("執行新增動作!!");
55        }
56  
57        protected void btnEdit_Click(object sender, System.Web.UI.ImageClickEventArgs e)
58        {
59            Response.Write("執行修改動作!!");
60        }
61  
62        protected void btnDelete_Click(object sender, System.Web.UI.ImageClickEventArgs e)
63        {
64            Response.Write("執行刪除動作!!");
65        }
66    }
67}

在作法上有幾個重要步驟:

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" %>
02  
03<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
04  
05<html xmlns=http://www.w3.org/1999/xhtml xmlns:fb="http://www.facebook.com/2008/fbml">
06<head runat="server">
07    <title></title>
08</head>
09<body>
10    <form id="form1" runat="server">
11    <div runat="server" id="ToolBar" />
12    </form>
13</body>
14</html>

子類別中我除了改掉繼承外,什麼也沒寫:

01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Web;
05using System.Web.UI;
06using System.Web.UI.WebControls;
07using Facebook;
08using Facebook.Rest;
09using Facebook.Session;
10using Facebook.Schema;
11  
12namespace WebApplication1
13{
14    public partial class _Default : BasePage
15    {
16        protected void Page_Load(object sender, EventArgs e)
17        {
18  
19        }
20    }
21}

 

  • 驗證功能

這樣就已經完成了簡單的頁面繼承功能囉,我們來驗證一下吧,開啟畫面會發現在我在BasePage宣告的三個按鈕加入到我的頁面上了:

image

按下新增:

image

按下修改:

image

按下刪除:

image

 

是不是很簡單,這樣就可以很簡單的透過繼承來完成ASP.NET的頁面繼承囉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值