本文開始通過ASP.NET MVC創建一個博客應用,該應用是通過默認的MVC模板修改而來,所以創建的過程和代碼都與默認模板一致,然后通過修改的方式將默認模板改為博客的主頁,并添加博客列表、內容等頁面。 本文主要內容有: ●創建一個ASP.NET MVC應用程序 創建一個ASP.NET MVC應用程序 在之前文章中介紹了ASP.NET中提供了3個開發動態網頁的框架,分別是Web Form、MVC以及Web Pages,也大概介紹了它們的特點。 Controller:這個類型用于處理來自瀏覽器的請求,獲取數據發送給指定的View的類。 本章將開始介紹如何使用ASP.NET MVC來搭建一個博客系統。 2. 選擇ASP.NET Web Application(.NET Framework)并輸入項目名稱: 3. 選擇MVC模板,身份驗證使用無身份驗證(注:身份驗證功能會在后續添加,此處無需添加此功能)。 4. 完成后將生成My Blog項目,以下是項目的默認目錄結構: 上面3個紅框框出的目錄分別保存Controller、Mode、View的內容,其余Content、fonts、Scripts分別對應前端頁面需要用到的樣式表、字體和Javascript。其余目錄和文件暫時不需了解。 5. 點擊VS2017的調試按鈕調試程序: 6. 運行結果: ASP.NET MVC默認代碼介紹ASP.NET MVC已經為我們搭建了一個默認模板,提供了三個頁面分別是Home、About以及Contact。 從代碼結構來看,項目中存在一個HomeController和Views\Home目錄下面的三個cshtml文件(注:Model在controller和view之間沒有任何數據交換的情況下是可以省略的)。 布局文件是Shared目錄下的_Layout.cshtml: (在調試狀態下)修改一下這個布局文件,或者說漢化一下,然后刷新: 可以看到標題、導航和頁腳的變化。 到此為止,已經為博客系統創建了一個ASP.NET MVC的項目。接下來將根據博客系統的需求來設計博客的列表頁和文章頁面。 修改ASP.NET MVC模板的默認頁面1.修改默認主頁為列表頁面: 打開View目錄下的Index,對其進行修改,修改效果如下: 部分代碼如下: 此處是主頁banner,其中"@Html.ActionLink("關于我?", "Contact", "Home", new { @class = "btn btn-default" })"這句代碼是用于生成一個連接到HomeController,Contact方法的連接。 上面代碼是一個列表區域(連接仍然是微軟的)。 2. 最后把關于和聯系我們的頁面也修改為我們想要的內容(About和Contact頁面): 注:到此為止的頁面修改操作均可以在調試狀態下修改,修改保存后刷新頁面即可看到修改。 文章最開始的時候對Controller進行了說明: 它用于處理來自瀏覽器的請求,上面上個方法剛好表示了之前頁面上的主頁--Index、關于--About、聯系我們--Contact,這些方法也叫Action,在Controller中的Public方法會被自動識別為Action。如果在調試狀態下可以在上面三個方法中設置斷點、然后再次訪問相應頁面,相應的斷點就會被命中: 還記得最開始的關于頁面有一個"Your application description page"的信息嗎?這個信息就來自于這里,而不是直接錄在頁面上的。 是不是感覺網站已經“動”起來了,它不再是HTML的硬編碼,設想一下如果這個Message來自數據庫或者一些配置文件,那么只需要修改數據庫或者配置文件的值,那么頁面也就隨之而變了。 創建博客Controller了解了View和Controller,那么就可以來考慮博客的需求了,文章列表和文章閱讀,創建一個PostController: 1. 右鍵Controllers目錄--->Add--->Controller: 2. 添加一個空的MVC5 Controller(注Add Scaffold譯為添加腳手架,腳手架用于根據T4模板動態生成代碼,VS默認有兩個腳手架,一個是帶有read、write活動(action)的以及使用Entity Framework并且生成View的。更多可參考http://jingpin./article/9058.html): 為Controller命名: PostController代碼: 同時也可以看到Views目錄下創建了一個名為Post的空目錄,現在還沒有Post的View的。 創建文章頁面為PostController的Index及Get Action方法添加頁面: 使用默認設置即可(Action在調用return View()方法的時候會去查找與Action名稱匹配的View)。另外從使用布局文件的選項那里可以看到,如果使用默認的_viewstart布局文件那么留空即可,這里為了保持頁面一致性,所以默認使用之前的布局文件(如果取消勾選“使用布局文件”,那么生成的View將會是一個完整的HTML文件,包含head、body等標簽)。 頁面代碼: 將文章列表頁面添加到導航上(布局文件_Layout.cshtml): 運行結果: 點擊跳轉到博客列表頁面: 創建View Model來表示文章數據1. 在Models目錄下添加一個Post類,并為其添加必要的屬性: 2. 在Controller中準備數據: 然后在獲取列表的方法中,將該列表的數據"傳到"頁面上: 這里要注意的是ViewBag是一個動態對象,可以對它添加任何的屬性,所有屬性在運行時解析: 頁面如何修改呢,直接上代碼?(Razor語法參考:http://www.cnblogs.com/dengxinglin/p/3352078.html) 運行結果: 同理修改文章查看action和頁面: 注:posts.where方法使用了.net提供的Linq功能,用來根據文章ID在文章集合中查找對應的文章對象,關于Linq可參考:https://baike.baidu.com/item/LINQ/4462670?fr=aladdin 運行結果: 功能完成,第一個ASP.NET MVC應用程序也就介紹到這里,這里實現最初分析的“讀者”的查看目錄和查看文章功能: 文章的最后來解釋一下為什么“localhost:52356/Post/Get/1”能夠訪問到文章1: 這段代碼是為MVC應用程序注冊了一個路由,這個路由根據url所指的模板去匹配,然后映射到相應的Controller和Action上,并且默認的Controller和Action是Home和Index,這也是為什么直接訪問地址時會自動打開主頁面的原因,而/Post/Get/1就代表了Controller是Post、Action是Get、參數id為1,這樣就能找到上面定義的Controller和Action然后進行調用,如果Controller和Action不存在則會拋出異常,更多關于路由的內容后續會詳細介紹。 小結: |
|