之前的My Blog提供了列表的展示和文章顯示功能,但是所有數據仍然只能通過數據庫錄入,為了完成最初的角色“作者”的用例,本章將介紹如何使用“Area”實現My Blog的管理功能。
根據功能分離代碼
根據功能分離代碼即所謂的模塊,由於在My Blog中已經存在博客查看功能,而管理功能與查看功能是有區別的,所以在開發時也應考慮將它們的代碼進行區分,以便於閱讀和管理。而區分代碼最常用的就是通過子目錄將它們區分,如下:
在Controllers、Models和Views目錄下創建Admin子目錄,但在ASP.NET MVC中提供了一個更容易切分功能的方法“Area”。
使用Area分離功能
1. 添加一個Admin Area:
在My Blog項目的右鍵菜單中找到Add--->Area:
Area名稱設置為Admin:
完成后將生成一下目錄和文件:
比較特殊的文件是AdminAreaRegistration.cs文件,該文件包含了該Area的路由信息,關於路由后續介紹:
創建管理模塊主頁
1. 倉儲中添加增、刪、改功能:
2. 業務邏輯添加增、刪、改功能:
3. 添加頁面布局文件(為了快速開發復制一份原有布局文件進行修改):
4. 添加管理主頁相關的HomeController、View:
Index.cshtml內容:
_Layout.cshtml:
_ViewStart.cshtml:
5. 為Admin Area路由添加命名空間(因為原來就有一個名為HomeController的控制器,用於顯示主頁)
對App_Start的RoutConfig.cs和Areas下面的AdminAreaRegistration.cs進行修改,注冊路由的時候加入命名空間:
添加文章管理功能
1. 添加PostManagement的Controller、View、Model
管理文章列表代碼:
更新文章代碼:
列表頁面:
更新文章頁面:
視圖模型:
代碼說明:
1. 為什么Controller中有兩個Update方法?
因為完成文章更新有兩個步驟,第一個步驟是根據ID向服務器請求文章數據,所以參數為id的update方法用於請求數據;第二個步驟是將修改后的數據提交到服務器,所以參數為PostMaintainViewModel類型的方法用於處理由瀏覽器提交的文章數據並保存。
一般來說獲取數據有HTTP的Get方法,提交數據使用Post方法,在ASP.NET MVC中的action默認使用Get,如果需要使用其它方法可以用特性來標記,如代碼中的[HttpPost]。
而兩個方法同名是為了表現出更新方法兩個
2. 頁面代碼中使用Html.BeginForm方法來生成一個form,HTML中的form用於向服務器提交form內的數據,ASP.NET MVC中可以使用這個方法來生成一個form。
3. 已經有PostViewModel問什么還要創建類似的PostMaintainViewModel?因為雖然內容相似甚至相同,但是畢竟功能不一樣,如果使用同一個ViewModel,那么當需要對其中一個功能進行拓展時會影響另一個功能。
運行效果:
小結
本章通過創建area的方法為My Blog提供了文章維護的功能,並介紹了主要代碼,現在My Blog已經具備內容展示和維護的功能,但是所有功能都是不完善的,比如界面、文章更新時候的排版還有訪問限制等,這些功能也將在后續慢慢完善。在使用Area開發新的功能模塊時需要注意的就是Controller的重名問題,如果存在重名需要在路由信息中加入命名空間的限制。