[ASP.NET] 開發ASP.NET您要瞭解的基楚
本篇主要是這幾天看了幾則論壇的發問,有感而發的文,就個人觀點而言,
要開發ASP.NET有幾個初學者必須要瞭解的基楚,因此僅就一點點經驗做點分享
(1)什麼是ASP.NET網頁生命週期及生命週期事件,當您不瞭解它時,很多時候就會出現
一堆您認為很莫名的問題,但它其實一點都不奇怪,怎麼說呢?
舉例來說:
- 為什麼postback後,使用者選的資料會不見?
- 為什麼postback後,資料庫存的資料不是使用者編輯後的?
諸如此類的問題,問到最後大多會發現,因為開發者把Data bind的動作或是控制項預設值
的設定,寫成如下
protected void Page_Load(object sender, EventArgs e)
{
radiobutton1.SelectedIndex = 0
}
而一般來說,應該是
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
radiobutton1.SelectedIndex = 0
}
}
因為Page_Load事件不管是第一次載入頁面或是postback後載入頁面,都是會被執行,而且
被執行的時間點順序會比控制項的Event來的早,也因此當您未加上IsPostBack的判斷時,
基本上控制項的值或狀態可能早就已經被還原了
- 為什麼動態新增控制項,postback後值會不見了?
更進階一點的,動態加入控制項,要完成這類的設計,您要瞭解ASP.NET網頁生命週期及生命週期事件
,因為您必須自行控制,什麼時機點該把控制項給Create起來,什麼時間點要把資料bind進去
(2)什麼是HTML,跟控制項有什麼關係
這個是很多用習慣了太好的IDE開發工具的開發者,或是從視窗介面軟體改開發Web Base軟體開發者
較容易不清楚的地方,在Visual Studio所提供的Web Control方便開發者在開發程式中能即看即所得
,但不管您用了什麼控制項,基本上只要是Web Base的程式,展到瀏覽器來看都它是化成HTML
的Tag去呈現的,所以認識HTML是必備的
(3) 控制項ID V.S Client ID
舉例來說:
- 為什麼用JavaScript會出現物件null的訊息?
上面提到由於Web Base的程式,展到瀏覽器來看都它是化成HTML,所以基本上也避免不了您可能會使
用到JavaScript或jQuery等語言,來控制一些網頁上的動作,JavaScript或jQuery必須透過操控DOM裡的物
件來進行的,要取得該物作則必得知它的ID值,但初學者容易混肴的是,以為控制項在IDE開發工項設計階段
中所給予的ID值,指的就是DOM裡物件的ID值,其實不對,一般來說對於JavaScript或jQuery在前端網頁
操控中要用到的ID值,會把它稱為Client ID,在設計階段,我們也可以用控制項.ClientID語法來取得
this.TextBox1.ClientID
(4) 學會FindControl
舉例來說:
- 如何找到同一筆資料列的控制項?
- ListView如何取得裡面LinkButton的值?
- 如何取Gridview裡面的物件?
FindControl應該是滿常使用到的,尤其是在當有使用到容器性質的控制項時,例如:GridView、
DataList等,關於FindControl可以參考之前所發的一篇文章『透析FindControl』
(5) 學著用DataBase類別庫,別太依賴精靈
這個老實說不知道是不是學校教科書的問題,常會看到一些剛入門的初學者,僅知道如何利用IDE開
發工具(例如:Visual Studio)所提供的精靈,建立與資料庫溝通的程式,但從不懷疑它背後做了哪些
事情又或是在程式碼裡增加了哪些東西,而很不幸的是,當遇上了進階一點的需求,無法由工具所以
的精靈來完成時,就不知道如何跟資料庫溝通了,所以建議別太依賴這些工具精靈,學會使用相關的
DataBase類別庫,例如:System.Data.SqlClient,才是王道啊!
(6) 控制項事件
舉例來說:
- 為什麼事件沒有反應?
很吊軌的是,最近看了幾個問題,發問者將網友所提供程式碼,貼回自己的程式裡時,卻說還是沒有反
應,搞到最後才發現,初學者並不知道那是控制的事件程式碼,或是不知道那叫做事件,僅僅貼回程式碼
,並未在控制項本身進行相關的連結設定(圖3),那當然是不會有作用的。
在使用控制項時除了設定屬性之外,再來就是事件了,開發者可透過控制項所提供的事件,自訂一些
相關的程式邏輯或是想做的事情,在Visual Studio開發工具裡,可以透過在aspx頁面選擇控制項,
按右鍵/屬性/切換到事件頁簽(有"閃電符號"的那頁),即可瀏覽控制項發行的事件,並選擇您想要
處理的事件點二下,即自動加入空的事件處理常式方法和程式碼,至於每個控制項到底有哪些事件呢?
請至MSDN自行查閱囉。
結語:
其實歸咎原因根本,大部份是基礎並不了解,或許有時是為了交學校專題之類,但如果真的想走
這個行業,最好還是從根本打起吧,雖然邊做邊學也是一種學習方式,但基本東西如果不求先了
解,邊做邊學也僅是拼拼湊湊而已
最後要推薦一下91哥以前發表過的一系列ASP.NET基礎學習文章『ASP.NET由淺入深系列』
By No.18