﻿# 關於 Code Behind 與 Code Inline 開發模式的使用時機與技巧

大家應該都知道從 ASP.NET 2.0 開始有區分 **Code Behind** 與 **Code Inline** 兩種開發模式，對我個人來說我兩種都喜歡，且各有各的使用時機，並不會完全使用 Code Behind 進行程式開發。

**Code Behind 開發模式的使用時機**

-   程式碼多、頁面中使用到較多的控制項事件，因為 Visual Studio 中的方法切換很方便  
    ![Visual Studio 中的方法(Method)切換很方便](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7715f0466c853d805eb4-image_22.png)
-   頁面邏輯較複雜
-   需要繼承較複雜的 BasePage 或需實做介面(Interface)

**Code Inline 開發模式的使用時機**

-   程式碼少（有些頁面中的控制項幾乎用宣告的方式就可以完成，完全不用寫 Code）
-   頁面中使用到較少的控制項事件
-   頁面邏輯簡單

雖然我有以上的使用時機的判斷依據，但我個人還是比較偏好 Code Inline 的開發方式。

例如以下 Code Inline 的程式碼範例，明明這一頁只有一個 Page\_Load 事件，何必要多新增一個 Code Behind 檔案呢，這種情況我通常都直接改用 Code Inline 的方式來寫，並且把 Code Behind 的 \*.aspx.cs 檔刪除。

![Code Inline 開發模式](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2190bca677a44c4de611-image_6.png)

另外，我們要替頁面上的控制項加上事件(Event)時，通常會用以下 3 種方法：

1.  透過 Visual Studio 的 **Design View** (**設計檢視**) 透過 UI 加上事件（雙擊控制項或透過屬性視窗）
2.  透過Visual Studio 的 **Source View** (**原始碼檢視**) 手動在控制項上面加上事件宣告，再去**程式碼區**新增事件方法
3.  直接在頁面的 Page\_Init 事件手動註冊控制項的事件（如下圖）：  
    [![直接在 Page\_Init 註冊控制項的事件](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/51bf7eda375312f83ec3-image_thumb_3.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/54f781589f792f405c28-image_11.png)  
    [![直接在 Page\_Init 註冊控制項的事件](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6487b479836a94efe0e6-image_thumb_4.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/646f1438c25139c8ad71-image_13.png)

通常我只會用第 1 種與第 3 種方法，第 2 種太麻煩了。我在使用 Visual Studio 開發 ASP.NET 網站時，幾乎不會切換到 Design View (設計檢視)，因為速度實在是太慢了。在很久以前，我會切到 Design View 的唯一理由就是要新增控制項的事件，不過現在也很少使用第 1 種方式新增事件了。所以我幾乎都是用「第 3 種」方法宣告事件的。

我覺得 C# Developer 應該很少人知道上述「第 2 種」新增事件的方法在 Visual Studio 中其實有個操作訣竅！只要你的頁面採用的是 **Code Inline** 的方式開發，就可以在 Visual Studio 左上角的開發視窗看到 Server Objects & Events 項目，而且會列出所有控制項出來。

![在 Visual Studio 左上角的開發視窗看到 Server Objects & Events 項目，而且會列出所有控制項出來](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a6754b6cb407cfab406f-image_25.png) 

先選完控制項之後，在右邊的下拉選單就會出現該選單的所有可用事件：

![Visual Studio 選完控制項之後，在右邊的下拉選單就會出現該選單的所有可用事件](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6af03ba3bee6afce2b7b-image_16.png)

點選完事件之後事件，在 Code Inline 的程式碼區就會自動新增該控制項的事件方法架構，而且控制項也會自動加上相對應的宣告屬性，是不是方便很多呢！

![點選完事件之後事件，在 Code Inline 的程式碼區就會自動新增該控制項的事件方法架構](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7789a3aa09ad72d8cfb9-image_19.png)

```
<asp:Button ID="BtnSend" runat="server" Text="送出" OnClick="BtnSend_Click" />
```

上述這一招我是從一篇 VB.NET 的教學影片學來的，但因為我之前也都是使用 Code Behind 的方式在開發，所以 Server Objects & Events 項目永遠不會出現，有一次改成 Code Inline 的時候突然發現原來用 C# 開發也可以用這種開發方法，真的是太方便了！^\_^

**小故事分享**

我之前曾經做過一個 ASP.NET 專案，等到專案交付原始碼的時候，客戶看到我們的網站竟然大部分頁面都是用 Code Inline 的方式開發的，然後劈頭就問我說「你們怎麼用 ASP 的模式在開發程式，寫 ASP.NET 不是就應該 Tag 與 Code 分離嗎？」總之就是一副認為我們寫的程式很糟糕的樣子。

用 Code Inline 的開發方式並不等於 Code 與 Tag 混雜([Spaghetti code](http://en.wikipedia.org/wiki/Spagetti_code))，只是程式碼與標籤放在同一個檔案裡而已。

我想他不是被 ASP 嚇到過，就是中 ASP.NET 的毒太深，然而這也是另一個知其然不知所以然的例子，希望各位開發人員能有所體悟，有時後 Know Why 比 Know How 更重要。
