﻿# 新書出版：〔ASP.NET MVC 4 開發實戰〕已於 12/20 上市

俗話說的好，有一就有二，無三不成禮。兩年多前出版了[人生第一本書](/post/2010/08/06/My-ASPNET-MVC-2-book-will-be-published-on-August-16th-2010.aspx)〔 [ASP.NET MVC 2 開發實戰](https://web.archive.org/web/20190820222102/https://www.delightpress.com.tw/book.aspx?book_id=SKNP00021)〕，獲得廣大開發人員的肯定與迴響，還曾經一度爬上天瓏排行榜冠軍，這些對我來說都是美好且難得的回憶。一年多前，也應邀翻譯了一本〔Windows Phone開發實戰〕書籍，還藉此提升了英文閱讀能力，也算有所收穫。今年，排除一切困難，在百忙之中抽空完成了前年這本書的改版，名為〔 [ASP.NET MVC 4 開發實戰](https://web.archive.org/web/20191112080721/https://www.delightpress.com.tw/book.aspx?book_id=sknp00028)〕且已在幾天前正式出版上市，趁著這次新年四天年假，著實是看書的大好時機，大家加油！ (^\_^)  
![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8b88c061c643fa44fd7c-image_1721.png)

ASP.NET MVC 問世已久，幾年前或許有人會擔心 ASP.NET MVC 框架是否能用在實務的專案上，也擔心用在新專案上是否真能改善開發效率與品質，但筆者這幾年下來，已經累積數十件網站專案改用 ASP.NET MVC 框架來開發，不但運作的十分順暢，而且也能讓完全不懂 ASP.NET MVC 的新手迅速理解核心觀念與開發架構，相信只要讀者擁有正確的觀念、學習到關鍵的核心技術，很快的就能活用在工作與專案上。

本書主要分成三大部分，將以循序漸進的方式，帶領各位揭開 ASP.NET MVC 4 的神秘面紗，導引各位建立正確的觀念，以及實際體驗 ASP.NET MVC 4的強大魅力。

**第一篇：基礎觀念篇**

**第1章：在學習 ASP.NET MVC 之前**

本章將介紹 ASP.NET MVC 的基礎知識，幫助你瞭解 ASP.NET MVC 的輪廓。由於著重於觀念，如果覺得看不懂，可先直接跳過，待後續的章節讀完之後，再回頭閱讀或許更能幫助你建立正確的觀念。

**第2章：建立正確的開發觀念**

主要說明使用 ASP.NET MVC 進行網站開發時應有的正確觀念。強大的工具若沒有正確的觀念支持，就像是給你一台馬力強又省油的手排車，而你不知道離合器如何使用是一樣的，也許你試了一段時間後，覺得車子還是開不快時，就提前放棄了一部好車。本章最後也整理了初學者對 ASP.NET MVC 經常會問的問題，並逐一進行回答。

**第3章：新手上路初體驗**

將介紹Visual Studio 2012開發環境與操作技巧，並利用Visual Studio 2012建立你的第一個 ASP.NET MVC 專案，讓讀者親身體驗 ASP.NET MVC 在進行實務開發時的完整過程，相信在逐步教學的帶領之下能讓現有的ASP.NET Web Form開發人員迅速瞭解與 ASP.NET MVC 開發差異，進而快速上手。

**第二篇：技術講解篇**

**第4****章：Routing****與 ASP.NET MVC** **生命週期**

想要掌握 ASP.NET MVC ，最重要的是瞭解網址路由 (Routing) 與執行生命週期的重要觀念。網址路由在 ASP.NET MVC 有兩個目的，第一個是比對透過瀏覽器傳來的HTTP要求，並對應到適當的Controller與Action進行處理；另一個目的則是決定 ASP.NET MVC 應該輸出什麼樣的網址回應給瀏覽器。雖然跳過本章仍然可以成功建置 ASP.NET MVC 網站，但瞭解它能幫助你理解 ASP.NET MVC 執行時的先後順序，進而減少犯錯的機會。

**第5****章：Model****相關技術**

在 ASP.NET MVC 開發的過程中，通常Model (模型) 是整個專案首要開發的部分，所有需要資料存取的地方都需仰賴Model提供服務。本章將從最基本的ORM觀念講起，介紹Visual Studio 2012內建的SQL Server 2012 Express LocalDB資料庫，以及學習如何使用Entity Framework Code First快速建立資料模型，並利用Code First資料庫移轉功能簡化資料庫操作的複雜度。最後還會介紹如何手動建立檢視資料模型(ViewModel)，並透過部分類別的擴充達到基本的欄位驗證。

**第6****章：剖析Controller****相關技術**

ASP.NET MVC 的核心就是Controller (控制器)，負責處理瀏覽器傳來的所有要求，並決定回應的內容，但Controller並不負責應如何顯示內容，僅回應特定型態的內容給 ASP.NET MVC 框架，而View才是決定回應內容的重要角色。本章也將會應用到第2章所提及的「關注點分離」、「以習慣取代配置」、「不要重複你自己」等觀念，讓你邁入 ASP.NET MVC 的殿堂，發現 ASP.NET MVC 的核心之美。

**第7****章：View****資料呈現相關技術**

View 負責資料的呈現，所有呈現資料的邏輯都會由View來控管，不過，View開發應該是整個 ASP.NET MVC 專案最花時間的，因為與顯示邏輯相關的技術五花八門，本章將會介紹許多 ASP.NET MVC 裡內建的 View 開發技術，以迅速解決各式複雜的開發情境。此外，從 ASP.NET MVC 3 開始新增的 Razor 語法，是一種有別於傳統 ASP.NET Web Form 的全新撰寫風格，在本章也會詳加闡述所有細節，讓讀者能在最短的時間內學會這個嶄新、優異的 Razor 語法。

**第8****章：Area****區域相關技術**

將介紹如何利用 ASP.NET MVC 的Area (區域) 機制，協助你架構較為大型的專案，讓獨立性高的功能獨立成一個 ASP.NET MVC 子網站，以降低網站與網站之間的耦合性，也可以透過 Area 的切割讓多人同時開發同個專案時，減少互相衝突的機會。

**第三篇：開發實戰篇**

**第9****章：進階實戰：電子商務網站開發**

本章將透過第二篇所習得的知識，以一套完整的電子商務網站為藍圖，詳述 ASP.NET MVC 4開發流程與分享許多實務開發技巧，從資料模型規劃、控制器架構規劃、建立檢視頁面、加入資料庫功能與購物車功能，最後再介紹如何強化現有 ASP.NET MVC 專案與資料分頁技巧，相信在融會貫通之後，即可有效運用於其他更複雜的專案上。

**第10****章： ASP.NET MVC** **開發技巧**

本章將整理一些在實務上經常使用的開發技巧。包括：強化網站安全性、多國語言支援、使用Visual Studio程式碼範本快速開發、如何在 ASP.NET MVC 與ASP.NET Web Form之間傳遞資料、如何對 ASP.NET MVC 4原始碼進行偵錯等、使用Visual Studio程式碼範本快速開發等等。雖然善用工具能有效提升開發效率，但還是要記得，擁有正確的觀念與紮實的技術，才是開發效率提升的不二法門。

**第11****章：安裝部署**

部署網站往往是一件麻煩事，因為在安裝部署的過程中，經常有許多步驟要執行，對於許多對 IIS/SQL 不太熟悉的新手來說，部署網站變成一件非常困難且危險的事。Visual Studio 2012 在 ASP.NET 網站部署方面提升了不少能力，有助於讓你將現有網站快速且簡便的發佈到遠端的IIS伺服器上，而免除了許多繁複的設定程序。此外還整理了幾個部署 ASP.NET MVC 的常見問題，當遇到問題時可供讀者參考。

* * *

**§ 勘誤聲明 **§****

就在本書出版後，親自拿到**實體書**的當下，才翻開來看幾頁，就立刻意識到一件很糗的事，也就是本書的「導讀」完全忘記更新，也就是其內容與兩年前的版本如出一轍，關於這點先跟各位購買第一刷的讀者說聲抱歉！

因為本書改版幅度不小，所以我打從一開始就決定「最後」在來寫導讀部分。對我來說，寫書的過程實在太過艱辛，不斷的想辦法擠時間出來撰稿，寫到最後完稿的那一刻完全鬆懈，也完全忘記有「導讀」的存在，實在太糟糕啦！ Orz

另外特別感謝細心的 **Chung-Yuan Wu** 網友提供以下勘誤：

-   P.45 倒數第 4 行

-   代辦事項 => 待辦事項

-   P.57 第 3 行

-   Gi => Git

-   P.234 第 2 行

-   ViewData => ViewBag

-   P.301 第 3 行

-   Length 前面的那個怪怪的符號不是亂碼，是「問號」喔！

感謝 **Jeff Wu** 提供以下勘誤 (2013-01-01)：

-   P.122 第一個程式碼範例最後一行少了 **VirtualPath** 結尾，如下紅字部分：
    
    ```
    @RouteTable.Routes.GetVirtualPath(     Request.RequestContext,     new RouteValueDictionary(new {page = 1})).VirtualPath
    ```
    
-   P.307 第 2 個範例程式，要把：
    
    ```
    @Html.TextBox("UserName", "Value", new { id = "testID" })
    ```
    
    改成：
    
    ```
    @Html.TextBox("UserName", "will", new { id = "testID" })
    ```
    

感謝 **Winf Lin** 提供以下勘誤：

-   P.124 第一行的 /Views/Home/About.aspx 應改成 /Views/Home/About.cshtml

**此書二刷之後發現的錯誤：**

感謝 **Hans** 提供以下勘誤 (2013-01-08)：

-   P.92 第 1 個表格中的範例程式，要把：
    
    ```
    @Html.DisplayNameFor(model=>model.姓名)
    @Html.LabelFor(model=>model.姓名)
    ```
    
    改成：
    
    ```
    @Html.DisplayNameFor(model=>model.Email)
    @Html.LabelFor(model=>model.Email)
    ```
    

感謝 **Trevor** 提供以下勘誤 (2013-01-12)：

-   P.206 中 TIPS 的最後一段，要將：
    
    ```
    由於 Login() 動作方法
    ```
    
    改成：
    
    ```
    由於 DoWork() 動作方法
    ```
    

感謝 **Chien-Hung Lai** 提供以下勘誤 (2013-01-14)：

-   P.65 表 3-1 在使用技術為 ASP.NET MVC 的地方，所有 .aspx 都要改成 .cshtml ( 有兩處要改 )
-   P.68 第一段文字最後的 View\\Home\\Index.aspx 要改成 View\\Home\\Index.cshtml
-   P.77 貼心提醒最後一行的 Index.aspx 要改成 Index.cshtml

感謝 **Chris** 提供以下勘誤 (2013-01-16)：

-   P.275 中間的那張圖片，應該改成以下圖片：  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/18160a391ce1b9fb2df3-image_1764.png)

感謝 **Winf Lin** 提供以下勘誤 (2013-01-20)：

-   P.84 第 1 段第 1 行，要將：
    
    ```
    Views\Home\About.cshtml
    ```
    
    改成：
    
    ```
    Views\Guestbook\About.cshtml
    ```
    

感謝 **maro** 提供以下勘誤 (2013-01-22)：

-   P.309 第 2 段範例程式，要將：
    
    ```
    @Html.DropDownList("List", ViewData["Item"] as SelectList, "請選擇")
    ```
    
    改成：
    
    ```
    @Html.DropDownList("List", ViewData["List"] as SelectList, "請選擇")
    ```
    

感謝 **Winf Lin** 提供以下勘誤 (2013-01-24)：

-   P.231 第 1 段第 2 行有漏一個字，要將：
    
    ```
    好讓這些資__可以傳遞給View使用
    ```
    
    改成：
    
    ```
    好讓這些資料可以傳遞給View使用
    ```
    

感謝 **Hans** 提供以下勘誤 (2013-02-08)：

-   P.340 的表 7-13 中，第4個範例之說明部分，要將：
    
    ```
    指定HomeController下名稱為About的Action帶有參數id
    ```
    
    改成：
    
    ```
    指定HomeController下名稱為About的Action帶有參數PageNo
    ```
    

感謝 **阿佐** 提供以下勘誤 (2013-03-30)：

-   P.368 章節【9-2-6 訂單明細】的範例程式，也就是 OrderDetail 這個類別中，少寫了一段 Amount 屬性(Property)，要補上：
    
    ```
            [DisplayName("購買數量")]
            [Required]
            public int Amount { get; set; }
    ```
    

感謝 **Winf Lin** 提供以下勘誤 (2013-04-28)：

-   P.384 第 1 個程式碼範例的倒數第 2 行，要將：
    
    ```
    @Ajax.ActionLink("加入購物車", "AddToCart", "Cart", ajaxOption)
    ```
    
    改成：
    
    ```
    @Ajax.ActionLink("加入購物車", "AddToCart", "Cart", new { ProductID = Model.Id }, ajaxOption)
    ```
    

* * *

**相關連結**

-   [悅知文化 - ASP.NET MVC 4 開發實戰](https://web.archive.org/web/20191112080721/https://www.delightpress.com.tw/book.aspx?book_id=sknp00028) ( <<< 本書**範例程式**下載 >>> )
-   [天瓏網路書店 | ASP.NET MVC 4 開發實戰](https://www.tenlong.com.tw/items/9865912201?item_id=513965)
-   [博客來書籍館 > ASP.NET MVC 4 開發實戰](http://www.books.com.tw/exep/prod/booksfile.php?item=0010570301)
-   [三民網路書店 > ASP.NET MVC 4 開發實戰](https://www.sanmin.com.tw/product/index/003593081)
-   [金石堂網路書店 > ASP.NET MVC 4 開發實戰](http://www.kingstone.com.tw/book/book_page.asp?kmcode=2013120229020)
-   [PChome 24h書店《ASP.NET MVC 4 開發實戰》](http://shopping.pchome.com.tw/?mod=item&func=exhibit&IT_NO=DJAP07-A72146822)
-   [PChome線上購物 - 24h 購物《ASP.NET MVC 4 開發實戰》](http://shopping.pchome.com.tw/?m=item&f=exhibit&IT_NO=DJAP07-A72146822&SR_NO=DSAE6J)
-   商務印書館 - ASP.NET MVC 4 開發實戰
-   [ASP.NET MVC 4 開發實戰-黃保翕 | TAAZE網路書店](http://www.taaze.tw/sing.html?pid=11100642076)
-   五南文化廣場網路書店 - ASP.NET MVC 4 開發實戰
-   露天拍賣 【大享】    ASP.NET MVC 4 開發實戰
