【前言】從今天開始,小靜要學習Pro ASP.NET MVC3 Framework這本經典大作了,我是下載的電子版學習的。在這里只是用作學習的記錄,便於以后查閱,也為了督促自己堅持下去。不用於任何商業用途。
要想掌握一種開發框架,光靠眼睛看是不夠的,一定要動手使用,才能快速熟悉起來。現在就從創建MVC3項目開始,一步步了解MVC項目的基本結構和開發流程。
1. 創建第一個MVC項目:
- 在安裝好MVC3環境之后,首先我們新建一個MVC3項目(ASP.NET MVC3 Web Application):
- 這里有三種項目模板:空模板,Internet應用程序和Intranet應用程序。我們選擇第二種。
- View引擎:在之前版本中使用的是ASPX引擎,MVC3引入了新的Razor引擎,它使用起來很方便又容易上手,所以一般建議使用Razor引擎。
- Create a unit test project:選中之后會自動創建測試項目。
- 點擊OK,可以看到項目創建成功,並自動生成了一些文件,項目解決方案如下所示:
- 運行項目,預覽效果:
2.創建第一個controller:
在webform開發方式里,url是和aspx文件所在的目錄相對應的,但在MVC結構中,請求是通過controller進行處理的。在ASP.NET MVC中,controller一般是繼承自System.Web.Mvc.Controller的類,通常放在controllers文件夾下。controller中每個public方法稱作一個action方法,可以通過特定url來調用action方法。
- 右鍵Controllers=>添加=>controller,名字要以Controller結尾。默認提供了三種controller模板,我們選擇空模板。
public class IndexController : Controller
{
public ActionResult Index()
{
return View();//返回與action同名的view結果
}
}
新建controller后,會默認添加一個名為Index的action,其返回類型為ActionResult。返回結果使用return View(),無參數表示返回與action同名的view,也可以傳遞字符串參數指定view名稱。
3.添加View來展示頁面
- View查找路徑:在添加view之前,我們先運行一下:
這個錯誤不但提示了MVC找不到view,還展示了查找view的順序。其中第一個index是url中的controller名字(去掉后綴);第二個index是action名稱,我們沒有指定action名稱的時候默認是Index,當然這個也是可以在Global文件中自定義的。
- 添加view:在Index這個action代碼塊內右鍵=>添加view,如下圖點擊OK。
我們可以看到自動添加了文件~/Views/Index/Index.cshtml,其路徑格式為~/Views/Controller名稱(去掉后綴)/action名稱.cshtml, .cshtml后綴表示使用Razor引擎的c# view文件。如果使用的ASPX引擎,那么view文件后綴還是.aspx。
4. ViewBag輸出動態數據:
從controller向view傳遞數據可以使用ViewBag對象,它是Controller從父類繼承來的屬性,從對象瀏覽器查看如下:
public dynamic ViewBag { get; }
Member of System.Web.Mvc . ControllerBase
Summary:
Gets the dynamic view data dictionary.
Returns:
The dynamic view data dictionary.
使用實例:
- 首先在controller為ViewBag賦值:
public ActionResult Index()
{
int hour = DateTime.Now.Hour;
ViewBag.hello = string.Format( "{0} ,歡迎來到大米返利網www.damifanli.com" , hour < 12 ? "早上好" : "下午好" );
return View();
}
- 然后在view中讀取ViewBag傳遞過來的數據:
@{
ViewBag.Title = "首頁";
}
- 運行效果如下:
至此,我們創建了第一個MVC3項目,對於MVC3項目的基本結構也有了初步了解。

![Image[4] Image[4]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vamFuZXMvMjAxMjEwLzIwMTIxMDA5MTAzOTA1NTMzLnBuZw==.png)
![Image(1)[4] Image(1)[4]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vamFuZXMvMjAxMjEwLzIwMTIxMDA5MTAzOTA2MTQ4MS5wbmc=.png)
![Image(2)[4] Image(2)[4]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vamFuZXMvMjAxMjEwLzIwMTIxMDA5MTAzOTA3Mjc3Ny5wbmc=.png)
![Image(3)[4] Image(3)[4]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vamFuZXMvMjAxMjEwLzIwMTIxMDA5MTAzOTA5NDU2NC5wbmc=.png)
![Image(4)[4] Image(4)[4]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vamFuZXMvMjAxMjEwLzIwMTIxMDA5MTAzOTEwNTI4LnBuZw==.png)
![Image(5)[4] Image(5)[4]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vamFuZXMvMjAxMjEwLzIwMTIxMDA5MTAzOTEyOTIxNy5wbmc=.png)

