亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET中基類頁的設計和使用

2024-07-10 13:13:14
字體:
來源:轉載
供稿:網友

在Asp.net業務系統的開發過程中,為了保證頁面風格的一致性以及減少重復代碼的編寫,我們需要引入基類頁的概念,即:定義一個基類頁,讓所有的頁面都繼承這個基類,并在該基類頁中加入公用的屬性和方法。

  實際使用時,按照功能頁面劃分,可以定義多個基類頁,如:
 

class FormBase
class BizFormBase :FormBase
class ViewFormBase : BizFormBase
class EditFormBase : BizFormBase
class QueryFormBase : FormBase

  FormBase:基類頁中的根,提供與業務無關的服務,如:URL重寫,日志等。
  BizFormBase:加入和業務相關的屬性,如:該頁面的當前業務對象ID等。
  ViewFormBase,:EditFormBase:實現具體的查看,編輯功能。
  QueryFormBase:實現對通用查詢頁面的封裝。

  從面向對象的角度看,基類頁與普通的基類,繼承類設計其實區別并不大,都要在基類中編寫公用的屬性方法,并通過虛函數、事件等方式讓繼承類重寫或響應。所不同的是基類頁的設計過程受到所在環境的約束。在WinForm環境下,我們可以預先定義好窗體的公用元素,如工具條,默認的表格以及DataSource控件等。而到了Asp.net下的WebForm,則無法實現界面一級的繼承,同時加入了狀態管理等要求。

  為了幫助大家理解,我們以查詢基類頁的設計過程來分析:

  一個最簡單的查詢頁面會包括三部分,多個查詢條件文本框,查詢按鈕,以及表格。同時查詢頁會和一個數據訪問組件關聯,當點查詢時,會把查詢條件轉成where語句提交給數據訪問組件。

QueryPeopleForm
OnQueryButtonClick()
{
 string peopleName = txtPeopleName.Text;
 string peopleAge = txtPeopleAge.Text;

 string sql;
 sql = string.Format(“Name Like‘%{0}%’and Age = {1}, PeopleName, peopleAge);

 PeopleManager manager = new PeopleManager();
 this.gridMain.DataSource = manager.GetDataTable(sql);
 this.gridMain.DataBind();
}

  當點擊查詢按鈕時,我們做了以下三件事:

  1、獲取查詢條件
  2、提交查詢
  3、將查詢結果綁定到表格

  這兒的提交查詢和綁定在不同的查詢頁面都是一樣的,于是我們首先把2,3放到基類頁中,并提供這樣一個方法:void QueryAndBind(IManager manager, string sql);這兒要定義IManager接口,讓所有的Manager都實現該接口,這樣基類頁就無需知道具體的Manager,只要調用IManager.GetDataTable方法,然后綁定表格到即可。

  使用基類頁后的代碼:

QueryPeopleForm : QueryFormBase
OnQueryButtonClick()
{
 string peopleName = txtPeopleName.Text;
 string peopleAge = txtPeopleAge.Text;
 sql = string.Format(“Name Like‘%{0}%’and Age = {1}, PeopleName, peopleAge);
 QueryAndBind(new PeopleManager(), sql);
}

  這兒的代碼少了,但仍有問題,當查詢條件變化后,每次拼查詢語句的工作即枯燥又容易出錯,那么我們加入一個Query類,以簡化這兒的操作:

public enum QueryOperator
{
 //等于比較。
 Equal = 0,
 // 不等于
 NotEqual = 1,
 // Like比較
 Like = 6
}

class Query
{
 void Add(string fieldName, string value, QueryOperator oper);
 string GetSql();
}

QueryPeopleForm : QueryFormBase
OnQueryButtonClick()
{
 Query query = new Query();
 query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
 query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
 QueryAndBind(new PeopleManager(), query.GetSql());
}

  把拼Sql的工作放在Query類中做,調用者只要聲明查詢字段,對應的值,和比較類型即可。

  到這一步,我們的基類頁已經很好用了,但還有一個小問題,也就是前面說的,在WebForm中無法實現界面級的繼承,那么基類頁的QueryAndBind方法,將無法知道查詢結果要綁定到哪一個表格,這時我們的做法是在基類頁中聲明DefaultGrid屬性,讓繼承頁來告知當前的表格控件。

  修改后的代碼:

QueryPeopleForm : QueryFormBase
OnQueryButtonClick()
{
 InitControls(gridMain);
 Query query = new Query();
 query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
 query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
 QueryAndBind(new PeopleManager(), query.GetSql());
}

  至此,基類頁的功能已經完整了,但仍然不夠,如果我們以后想改變查詢按鈕點擊的行為,比如查詢結果為空時,要彈出對話框提示,這時仍然要到處修改頁面代碼,這不是我們所希望的,于是我們將QueryButton的OnClick操作也放在基類頁了中執行,繼承頁只要初始化數據訪問組件和設置查詢條件即可。

QueryPeopleForm : QueryFormBase
void Initialize()
{
 // 指定頁面對應的Manager
 Manager = new PeopleManager();
 // 綁定控件
 InitControls(gridMain, btnQuery);
}

void GetQueryInfo(Query query)
{
 //獲得查詢條件
 query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
 query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
}

QueryFormBase:

private IManager manager = null;
public IManager Manager
{
 get { return manager; }
 set { manager = value; }
}

void InitControls(GridView grid, Button queryButton)
{
 this.defaultGrid = grid;
 this.queryButton = queryButton;
 queryButton.Click += new EventHandler(QueryButton_Click);
}

void QueryButton_Click(object sender, EventArgs e)
{
 Query query = new Query();
 GetQueryInfo(Query);
 QueryAndBind(manager, query.GetSql());
}

  總的代碼可以從附件中下載,大家可以加入斷點,看看基類,繼承類頁的代碼執行順序。

  應該說基類的設計相對復雜,但好處是繼承頁的代碼變得清楚了,沒有多余重復的代碼。

  而基類頁的設計其實是有技巧的,總結起來有以下幾條:

  1、首先以最直接的方式寫出頁面代碼
  2、提取公用方法和添加輔助類
  3、提取事件處理流程到基類頁中
  4、在基類頁中設計需要繼承頁重載的方法與事件

  從設計上來講,用基類頁的方式來統一操作、簡化頁面代碼是一種非常直觀的方式,缺點是隨著項目的演化,基類頁會變得大而全,不容易被新的項目重用,這時我們就可以考慮把其中的一部分功能放到用戶控件和自定義組件中來實現,以減少耦合性和提高重用性。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美电影免费观看高清完整| 精品久久久久久久久久国产| 色一情一乱一区二区| 亚洲第一区在线| 一区二区三区在线播放欧美| 日韩有码在线电影| 国内久久久精品| 色久欧美在线视频观看| 性欧美亚洲xxxx乳在线观看| 久久久久久12| 欧美精品www| 欧美性猛交xxxx黑人猛交| 98精品国产自产在线观看| 国产欧美久久一区二区| 欧美裸身视频免费观看| 欧美激情成人在线视频| 欧美成人性生活| 欧美成年人视频网站| 国模私拍一区二区三区| 日韩久久精品成人| 欧美天天综合色影久久精品| 成人激情黄色网| 日韩欧美在线播放| 欧美黄色三级网站| 成人精品一区二区三区电影免费| 亚洲韩国日本中文字幕| 久久久久久久久久久成人| 久久久久久久久久久网站| 大荫蒂欧美视频另类xxxx| 欧美精品激情blacked18| 91欧美视频网站| 亚洲国产欧美在线成人app| 亚洲天堂av在线播放| 日韩av免费在线播放| 色综合老司机第九色激情| 午夜精品一区二区三区视频免费看| 国产精品久久久久久久av电影| 欧美超级免费视 在线| 久久九九有精品国产23| 九九热这里只有在线精品视| 国产有码在线一区二区视频| 国产不卡一区二区在线播放| 中国人与牲禽动交精品| 亚洲视频999| 91大神福利视频在线| 欧美第一页在线| 91精品国产色综合| 久久99久久99精品中文字幕| 国产精品亚洲аv天堂网| 精品一区电影国产| 亚洲成成品网站| 国产欧美日韩亚洲精品| 欧美精品精品精品精品免费| 亚洲美女动态图120秒| 亚洲精品99久久久久| 亚洲免费av电影| 欧美夫妻性生活视频| 亚洲视频综合网| 日本欧美国产在线| 日韩美女视频在线观看| 在线免费看av不卡| 日韩在线观看av| 国产日产欧美精品| 久久国产精品免费视频| 欧美精品www| 91丨九色丨国产在线| 亚洲a区在线视频| 欧美做受高潮电影o| 国产亚洲日本欧美韩国| 欧美性猛交视频| 精品久久久久久久大神国产| 久久亚洲国产精品| 亚洲国产精品久久精品怡红院| 国产在线精品一区免费香蕉| 国产精品亚洲一区二区三区| 欧美激情亚洲一区| 91在线|亚洲| 亚洲毛片在线免费观看| 三级精品视频久久久久| 岛国视频午夜一区免费在线观看| 国产精品免费久久久| 国产精品三级久久久久久电影| 国产日韩欧美日韩大片| 精品中文视频在线| 亚洲综合在线中文字幕| 欧美国产日韩xxxxx| 午夜精品一区二区三区在线| 欧美精品精品精品精品免费| 久久久精品2019中文字幕神马| 福利微拍一区二区| 一区二区三区回区在观看免费视频| 久久人人97超碰精品888| 日本一区二区在线免费播放| 国产日韩欧美中文| 久久免费成人精品视频| 91免费看片在线| 欧美肥臀大乳一区二区免费视频| 国产精品精品久久久久久| 久久国产色av| 一本一道久久a久久精品逆3p| 狠狠久久亚洲欧美专区| 久久久极品av| 欧美中文字幕视频在线观看| 一区二区三区高清国产| 最近中文字幕2019免费| 97成人精品区在线播放| 国产欧美一区二区三区久久人妖| 亚洲偷熟乱区亚洲香蕉av| 成人在线中文字幕| 这里只有精品视频| 国产一区二区日韩精品欧美精品| 国产精品视频26uuu| 国产精品亚洲精品| 亚洲a在线播放| 久久成人综合视频| 日本精品久久中文字幕佐佐木| 日韩视频免费观看| 色婷婷综合久久久久中文字幕1| 久久偷看各类女兵18女厕嘘嘘| 91精品国产亚洲| 97福利一区二区| 国产女同一区二区| 91精品久久久久久久久久久| 欧美激情综合色| 欧美成人黑人xx视频免费观看| 欧美激情精品久久久久久变态| 亚洲国产精品女人久久久| 国产aⅴ夜夜欢一区二区三区| 精品国产老师黑色丝袜高跟鞋| 日韩av123| 中文字幕亚洲欧美一区二区三区| 日韩视频在线一区| 欧美在线视频免费观看| 久久精品国产69国产精品亚洲| 成人网页在线免费观看| 亚洲综合色激情五月| 日韩午夜在线视频| 久久深夜福利免费观看| 欧美激情一级欧美精品| 国产97在线播放| 精品性高朝久久久久久久| 日韩欧美国产中文字幕| 91精品国产乱码久久久久久久久| 亚洲福利视频网站| 亚洲一区二区三区香蕉| 久久精品男人天堂| 中文字幕9999| 国产精品一区二区3区| 91精品国产91久久久久久不卡| 在线中文字幕日韩| 97国产suv精品一区二区62| 欧美激情国产日韩精品一区18| 欧美福利小视频| 欧美午夜影院在线视频| 中文字幕av一区二区三区谷原希美| 成人在线免费观看视视频| 一区二区三区精品99久久| 91精品国产综合久久香蕉922| 一本色道久久88综合亚洲精品ⅰ| 91在线免费看网站| 亚洲精品美女久久久| 91精品视频在线免费观看| 日韩亚洲国产中文字幕| 亚洲精选一区二区|