微軟的ASP.NET的開發,就是面向對象的編程,當然前端也能體驗至面向對象的話,使用Web控件也必須的。任一控件,我們均可以在后端.aspx.cs或.aspx.vb程序中new一個對象出來。很多場合里,在開發ASP.NET開發中,后端與前端交互,我們使用控件確實能方便與快捷互通。本篇所涉及的內容以html markup標簽與javascript(或jQuery)無關,因為演示的是Web控件應用。Insus.NET經常會針對開發的應用程序,寫一些常用或是特定的對象或是控件。在一起開發的團隊的能句方便用使用,能得到客戶需求的功能與效果。開發這些對象或是控件,也并非一開始就能寫得出來,均是經過一系列編程之后,再次review或是優化的結果。舉個例子來說明,先在SQL Server數據庫中,創建一個數據表,如[dbo].[UserInfo]:對這個表,添加幾筆記錄:
寫一個存儲過程,是獲取剛才添加的所有記錄:
OK,數據庫層已經設計好了,我們去ASP.NET網站寫程序,需要把這些數據呈現于網頁上。邏輯層就使用《ASP.NET開發,從二層至三層,至面向對象 (3)》 http://www.49028c.com/insus/p/3826706.html將來的的博文演示中也會使用它。在App_Code目錄下,創建一個以數據表名相同的一個類(對象):
新建一個網頁.aspx,用它來呈現數據表的數據,直接拉數據控件GridView:在.aspx.cs代碼中,實現給GridView控件綁定數據:
瀏覽一下:
以上的實現,相信很多學習與開發asp.net的人都會,太簡單了,根本不值得一說一提一寫。
問題來了,最后一列[Sex],性別具體1代碼是男還是女,反之亦如此。能否以更友好清晰的表達來表現?下面列幾種網友用常的方法:第一種方法,寫一個小函數去替換:
寫好函數之后,在.aspx的Gridview控件,需要修改,不能使用自動產生列了:
預覽結果:
第二種方法,較為復雜一些,不過也較常使用的,在.aspx分三步來修改GridView:
下面是實現OnRowDataBound="GridView1_RowDataBound":此種方法預覽結果跟第一種方法是一樣的。
第三種方法,是Insus.NET使用的方法。出現這樣的問題,多數是多表關聯,一張表某些字段是另一個表的外鍵值。呈現時,均是鍵值或是代號。但實際是需要顯示實際意義的字段。
解決它,可以創建一個表,是key與value對應的表:然后修改一下[dbo].[usp_UserInfo_GetAll]存儲過程:
在asp.net程序中,在后端無需修心任代碼。
在.aspx頁中的GridView中,僅引用另一個字段名:
三種方法,均演示完成了。哪一種方法,你覺得好,就使參考哪一種。下面有新的要求,客戶要求,將顯示的0或1的信息,使用一張圖片來替代。這要求不難,用文字“男”或“女”還是用圖片去替代0或1的方法,均是一樣的。用Image去實現就是了。下面Insus.NET來演示一番:實現之前,得先準備好兩張圖片,放于站點某一目錄之下。
上面有三個步驟標記1至標記3。
編寫一個私有函數:
然后就可以寫OnRowDataBound="GridView1_RowDataBound"事件了:
改好了,瀏覽看看效果:
上面圖片替換方法,是通用大家所使用的方法。不過Insus.NET的方法,卻不是這樣來做。Insus.NET需要封裝GetSexImagePath(string num)或是GetSex(string num)函數另外,由這地方的呈現在一個網站中,也許不止一次(網頁)呈現,在管理員后臺,會員后臺,前端面向所有用戶呈現的網頁均要此樣式呈現。
因此,可以寫成一個控件即可,先在App_Code創建一個類別SexImg:
有三個public的PRoperty以及override方法RenderContents()。重要的一點,是繼承了WebControl類。接著,我們打開web.config文件,注冊一下上面我們創建好的控件:
現在的問題是怎樣使用這個控件呢?跟Web控件一樣,沒有什么分別:
在GridView控件內,使用剛才寫好的控件,直接指寫三個property。
在.aspx.cs內,無需寫什么代碼:
瀏覽的效果,跟上面的一樣:
最后一個演示,學會了封裝與創建自己定義控件。Insus.NET雖然只是依性別來舉列,實現開發時,可會遇上很多類別,目錄等相關的。方法掌握了,相似的功能可以輕易實現。
新聞熱點
疑難解答