本文地址:http://www.cnblogs.com/outtamyhead/archive/2013/03/19/2970172.html。轉載需保留本地址!
說在前面:
1、由於是頭次翻譯整本書籍,所以錯誤難免,希望大家都提出來,翻譯的不好還望大家少拍磚多鼓勵。
2、該系列沒有按照原文直譯,而是加入了我的一些言語在里面(在沒有改變原意的情況下),所以大家在看的時候希望有所對照。
3、該系列每周出一或二篇博客,因為我最近很忙,一直在加班,很累的說。
4、該系列不提供原版文字,希望看原版的可以自行下載Pdf。
5、該系列省去了前面的廢話,單刀直入,講主體內容。
第二章:第一個ASP.NET MVC4程序(上)
引文:
領會一個開發框架最好的方式就是找到合適的框架並使用它。在這一章中,將帶你建立一個基於ASP.NET MVC4的簡單數據實體應用程序。我們將一步一步的告訴你ASP.NET MVC應用程序是怎么建立起來的。為了盡量簡單化,我們將跳過一些技術細節;但是不用擔心,如果你是個初學者,你會發現很多有趣的東西。在我們不解釋地使用某些東西的地方,我們提供了參考章節,你可以找到所有的細節問題。
唯一的准備工作就是是需要你安裝Visual Studio 2012,它包含了你需要的所有東西,包括一個內置的應用程序服務器(IIS Express)用於運行和調試你的MVC應用程序,一個免費的SQl Server開發databasedriven應用程序,單元測試工具,當然還有代碼編輯器和調試器。
Visual Studio 2012有幾種不同的版本,我們將使用免費的Visual Studio 2012 For Web這一版。在Visual Studio的付費版本中微軟添加了一些比較實用的東西,但是在這本書里我們不需要並且本書所有的示例都是在Express版本上開發的。如果你需要其他版本,可以在http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products下載。這里有好幾個版本的Visual Studio Express,每一個都有不同的開發用途,一定要確保你下載的是支持MVC應用程序的Web版。
一旦你已經安裝了Visual Studio,那就算是准備好了。微軟確實提高了Visual Studio Express的功能范圍,在這本書里你沒有其他需要注意的問題了。
提示:在這本書里我們使用了Windows 8,但是你可以在windows的早期版本中使用Visual Studio 2012 和開發MVC4應用程序。
創建一個ASP.NET MVC項目
我們將在Visual Studio中創建一個新的MVC項目。從【File】菜單中選擇【New】--【Project】,打開【New Project】對話框。如果你在【Visual C#】節下選擇【Web】,你會看見一個叫做【ASP.NET MVC 4 Web Application】的項目類型。選擇這個類型,如2-1所示。
小心:Visual Studio 2012同時支持MVC3和MVC4,你會在菜單中看到前一版本的模板。當在創建新項目時需要注意選擇正確的那一個。
新項目的名字叫做ParyInvites,然后點擊【OK】按鈕繼續。你會看到另外一個對話框,如圖2-2,詢問你在MVC項目模板中選擇哪一個。
不同的MVC項目模板創建的項目會在基礎支持上有所不同,像驗證,導航,樣式。在這一節中,我們為了盡量保持簡單,選擇【Empty】,這樣將創建一個只有基本文件夾的項目,但是不會包含任何MVC程序需要的文件。在這一節里,我們將添加我們需要的文件並解釋我們做的每一步。
點擊【OK】按鈕來完成創建。
備注:在2-2中,你會看見一個下拉菜單讓我們選擇不同的視圖引擎,在MVC3中,微軟介紹了一種新的並且高效的視圖引擎:Razor,在這本書里我們將使用Razor引擎。我們希望你也是一樣。但是如果你希望使用ASP.NET引擎(也被稱為ASPX引擎),這就是你的選擇。我們會解釋Razor和視圖引擎在第五和第十八章。
當項目創建完成,你會在【Solution Explorer】窗口看見一些文件和文件夾。這是MVC4項目中默認的結構。現在你可以試着運行一下應用程序,通過【Debug】--【Start Debugging】(如果它提示你啟動調試,那么點擊【OK】就可以了)。你可以在2-3中看到效果。因為我們啟動的是一個空項目,應用程序中沒有包含任何內容,所以出現了404錯誤。
調試完成之后,記得關閉顯示錯誤頁面的瀏覽器來停止調試或者在Visual Studio中通過【Debug】--【Stop Debugging】來停止調試。
Visual Studio通過瀏覽器來展示我們的項目,你可以通過工具欄來更改我們要使用的瀏覽器,如圖2-4。你可以看到我們安裝了IE和Chrome。
在這本書中,我們將使用IE10。所有的現在的瀏覽器都是不錯的,但是我們還會堅持使用IE因為我們知道它是被廣泛安裝的。
添加第一個控制器
在MVC架構中,由控制器處理傳入的請求。在ASP.NET MVC中,控制器只是簡單的C#類(通常是繼承System.Web.Mvc.Controller-框架的內置控制器基類)。在控制器中每一個公共方法都被稱為Action(動作),意味着你可以通過某個URL從Web來調用它來執行一些動作。在MVC約定中,通常將控制器類放在【Controllers】文件夾中,這個文件夾會在我們創建項目時由Visual Studio來創建。你不必遵循這些MVC約定,但是我們希望你能遵循這些約定,因為它能幫助你更好的理解本書中的示例。
要在我們的項目中添加控制器,只需要在【Controllers】文件夾上右鍵,選擇【Add】--【Controller】,如圖2-5。
當【Add Controller】對話框出現后,把名稱設置為HomeController,如圖2-6.這還有一個約定:我們提供給控制器的名稱應該是具有描述性的並以Controller結尾。
在對話框中的【Scaffolding options】,允許我們通過模板來創建控制器。我們不需要這個功能,所以只要選擇【Empty MVC controller】就可以了,如上圖所示。
點擊【Add】按鈕來完成創建。Visual Studio將會在【Controllers】文件夾中創建一個新的名叫HomeController.cs的C#代碼文件並且自動打開它以便編輯。我們已經列出了Visual Studio自動為我們放到文件中的代碼,清單2-1,你可以看到這個類叫做HomeController並且它繼承自System.Web.Mvc.Controller。
清單2-1:using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace PartyInvites.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } } }
一個很好的方法去理解MVC就是對控制器類做一些小小的改變。編輯HomeController.cs使它和清單2-2相匹配。我們對修改的地方做了高亮處理,使它更顯而易見。
清單2-2: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace PartyInvites.Controllers { public class HomeController : Controller { public string Index() { return "Hello World"; } } }
我們沒有創建任何叫人興奮的東西,但是它卻是一個非常好的示例。我們修改了Index方法讓它返回了字符串“Hello,World”。重新運行程序,瀏覽器將會顯示Index方法的結果,如圖2-7。
理解路由
與模型、視圖、控制器,MVC應用程序使用ASP.NET路由機制,它決定URL如何映射到特定的控制器和動作。當Visual Studio創建了MVC項目,它添加了一些默認的路由來供我們使用。下面的URL你可以任意請求,並且它們會被直接引向HomeController中的Index動作:
/
/Home
/Home/Index
所以,當瀏覽器請求http://yousite/或者http://yoursite/Home,它都會返回HomeController中Index方法的輸出結果。你可以自己在瀏覽器中嘗試一下。這時候,地址可能是http://localhost:61982,除了端口可能不同外,如果你后面加上了/Home或者/Home/Index,你可以看到同樣的結果。
這是一個很好的受益於MVC約定的示例。在這個示例中,這個約定是:我們有一個名為HomeController的控制器並且它是我們MVC應用程序的起點。假設我們遵循使用默認路由這一約定,當我們按照這個約定來做,我們將獲得前面列表中URL的支持。如果我們沒有按照這個約定來做,我們需要修改路由來指向控制器。像在這個示例中,默認的路由配置是對我們很有用的。
提示:你可以通過Global.asax.cs文件來編輯你的路由配置。在第7章,你將自定義路由,在第13和14章你會學到關於路由的更多知識。