[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day4 - Server Controls

[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day4 - Server Controls

前言
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差異在哪?

  1. ID:在server端用來辨識唯一的Identity。
    需要注意的是在data container中,例如template field,無法直接取用,要透過FindControl來找到該control並轉型使用。
  2. ClientID:HTML上DOM的id。
    需要注意的是當外面有container時,ClientID的prefix會加上container的id。
    例如:MasterPage、UserControl、GridView等等...
  3. UniqueID:HTML上DOM的name。
    通常是Request.Form的時候要用到。
  4. 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使用?

 


blog 與課程更新內容,請前往新站位置:http://tdd.best/