ASP.NET Webform最讓人津津樂道的,就是可以無痛開發web程式。
最讓人詬病的也是容易養出一堆只會拖拉控制項的無腦Web工程師。
Server controls很好用,但一定要知道原理、目的,才會懂得變化。
這一篇先簡單帶到一些共同的特性,後續會再用一篇文章,把常用的control簡介一下。
Server control與HTML之間的關係?
Server control最後的結果也是Render成HTML與JavaScript,
developer要明白server control與HTML DOM的對應關係,例如:
例如TextBox的TextMode屬性有三種:
1.SingleLine,對應到HTML是<input type='text' />
2.MultiLine,對應到HTML是<textarea />
3.Password,對應到HTML是<input type='password' />
例如Button的UseSubmitBehavior屬性,
設定為true,對應到的HTML是<input type='submit' />
設定為false,對應到的HTML是<input type='button' />
與人溝通上也應避免使用錯誤的term而引起誤會,例如:
討論HTML應該講text,而不是講TextBox。
討論HTML應該講textarea,而不是TextBox。
討論server control應該講DropDownList,而非select,等等...
Server controls常見的ID, ClientID, UniqueID, SkinID差異在哪?
ID:在server端用來辨識唯一的Identity。
需要注意的是在data container中,例如template field,無法直接取用,要透過FindControl來找到該control並轉型使用。
ClientID:HTML上DOM的id。
需要注意的是當外面有container時,ClientID的prefix會加上container的id。
例如:MasterPage、UserControl、GridView等等...
UniqueID:HTML上DOM的name。
通常是Request.Form的時候要用到。
SkinID:類似server端的css一樣,只是幫server control套用某一些屬性(包括CssClass)
需要額外注意的是,有一些屬性無法套用、覆寫原有屬性的priority、要動態修改SkinID,只能在頁面Init事件之前。
What is server control : runat="server"
基本上有runat="server" 就可以稱的上是server control,因為可以從server端控制最後的HTML output stream。
Why server control?
透過server control,將generation of HTML and JavaScript封裝起來,可以用抽象的角度去使用這些Control達到方便使用以及重用性。
server control通常封裝了哪些東西?
1.Property
Property可以影響HTML的Render,決定最後什麼樣的屬性要長出什麼樣的HTML或javascript。例如:前面文章提到的AutoPostBack
2.Function
Function通常是一連串的邏輯或處理,定義成一個抽象意義的行為,例如DropDownList.DataBind()
3.Event
事件則是對應client端Render出來對應的DOM事件與ViewState,來決定是否要觸發相對應的事件。
最後,請想學習的客倌,看完這篇文章思考一下,下列的問題該如何回答:
1.Server control與HTML之間的關係?
2.ID, ClientID, UniqueID, SkinID是什麼?
3.怎樣算稱得上是server control?
4.為什麼需要server control?
5.Server control通常封裝了哪一些東西,方便developer使用?
這個不是二年前的技術?
Server Controls 有一個缺點.吃資源太多了.
而現在出來MVC..不同的新技術.
所以我現在都用HTML然後用javascript在client做運算,透過Ajax和泛生的方案去Server撈資料回來做運算.
嗯,我還在想,他是不是最後會介紹到Web MVC。
順便說明一下,之後我也會介紹在web form中,怎麼使用Ajax去跟asmx, aspx, ashx做非同步的資料處理囉。
話說用 HTML + JavaScript 在 Client 端運算,並透過效果 "類似" AJAX 的方式去 Server 撈資料,早在 ASP 的年代就有這種撇步了!!
MVC有MVC的好,Web form有web form的好,而且在台灣軟體業,web form還是佔絕大多數囉。
這一次分享的主題,一開始就有提到我會focus在Web form的特殊行為。
越後面會越介紹到比較common的design concept,包括ajax, OO, IoC, AOP, ORM等等...
MVC的部分,我最多只算會用,要分享或是把不懂的人教會,我還不夠格。
各位有興趣的話,可以去保哥的網站,相信會收穫更多的。
保哥:http://blog.miniasp.com/
還是希望可以幫助到工作上或想瞭解Web form的朋友們,從原理開始認識囉。
by the way, 我也認為MVC為學習切入點,會對http的行為比較有幫助,而不是一開始都被ASP.NET webform給封裝得好好的。不過實際面,Microsoft只是多一個選擇給大家選,沒有所謂誰比較好,只有什麼時候比較適用什麼技術而已。能多懂總是比較好的。
對我來講, 只要一個技術出現超過24小時都算舊了啦, 因為反正是嘴砲嘛!
忘了講一點, 關於資源的部份, 我認為大家應該開始推廣我十幾二十年前在使用的東西-- Assembly來寫網頁程式, 這樣不但省資源, 而且產生的Html Code 搞不好還有機會變成作業系統
還是請用力的把server controls 講完(好像已經講完了,好棒)。
我覺得,直正所謂的原創,所謂的新技術,幾乎是很少見。
硬碟夠舊了吧,但是硬碟的道理學通,之後也是無往不利,就像上樓的人講的,
組合語言學通,也可以輔助理解之後很多應用程式的架構。
web form沒有mvc,所謂mvc,一樣要asp.net MVC才算mvc?
我覺得作者,倒是後來,也可以寫這類的,像你把結構理解的那麼深,
大概mvc也含在你的code,或是要切,也切得很開了。
mvc有一個好處,就是ror 大概已經把遊戲規則規範好了,所以之後的mvc,不管用那個語言,
基本的程式碼產生器,該有的指令,設定檔,controller裏的方法的命名方式,
view裏的樣板,基本上都大同小異,我是用過grail和ror,一點點asp.net mvc, 覺得
8~9成都類似,外掛,反而會讓人認為mvc就是要長成這樣(目錄至少要有3個來代表mvc),
也許有人也可以不用這樣來寫mvc。
謝謝您的鼓勵,感覺您也是具備頗多經驗的工程師,也希望您能給多一點的意見或是補充唷,在這邊先謝過了。
Server Control的部分其實還有太多可以講,有點講不完,又不想佔太多篇幅,因為要用的人再去查MSDN文件庫,我覺得會比較快,而且比較有感覺。但還是歡迎大家可以上來提出問題互相討論。
Server Control拆了4篇,我已經有一點罪惡感了,而且很常文章寫太長,塞不進去
真知灼見啊,沒錯,並不是套用樣版就叫做『會寫那種程式』,ASP.NET MVC也不過就是將MVC的概念具象化的樣版,主要還是為了便利於程式發展者能夠更方便地使用這種概念。一如物件導向一般,並不是用了Java/C++/C#/VB.NET等所謂物件導向程式語言來寫程式就真的符合了物件導向的開發,那物件導向程式設計未免也太被低估了,重點在於自己怎麼寫程式,而不是用什麼東西寫程式。
如果寫程式會寫到有『工具歧視』的傾向,只因別人使用的工具來判定優劣,那只能說這種思想真是太不成熟了。