在上一篇<學習MVC之租房網站(四)-實作Service層并進行單元測試>中,記錄了實作Service層并進行單元測試的過程,接下來該到“正題”-MVC了,也就是UI層的開發。
網站分為前台、背景兩部分,因為背景涉及到一些在業務上來說基礎的東西,比如使用者管理、房源編輯等,是以先完成背景UI即AdminWeb項目。那麼就從權限、角色、使用者這一塊開始了。
一、使用者管理
隻通過對與使用者管理相關的功能的開發,來回顧MVC的基本操作。
1. Controller
添加AdminUserController,添加List動作以查找并展示所有的使用者清單,在List動作中要調用AdminUserService.GetAll()方法,但不會直接調用。之前已經準備好了IService層,還要在Application_Start中設定Autofac為ASP.NET MVC的預設解析器,以後所有的Controller将由Autofac管理。

使用者的增删改查要涉及到使用者所在的城市、所屬的角色,是以除了AdminUserService,AdminUserController還會調用CityService和RoleService中的方法,那麼就把這三個接口聲明為屬性,Autofac解析控制器時會自動為這些屬性注入對應的實作類,到這兒開始對IOC的優勢有點體會了。
然後,如果要查找使用者清單,隻需_AuService.GetAll()。
2. Model
List方法如下:
GetAll()傳回的是AdminUserDTO[],于是就直接把AdminUserDTO[]結果集送給View了,這兒并沒有指定專門的Model,而且DTO(Data Transfer Object)的本意就是用來轉運資料的,由此可見理論與實踐的差别,要善于變通而不是恪守理論。
3. View
視圖檔案使用了VS自帶的razor模闆引擎,檔案字尾為.cshtml,沒用過其它模闆引擎,但至少跟aspx相比還是讓人相當“眼前一亮”的,眼前一亮要加引号,是因為想到razor出來已經很多年了,當年最早的razor使用者們的感受應該會是眼前一亮吧,而若幹年後的某一天,菜鳥在看到razor時的感受想必與他們也非常類似,由此幻想跨越時空,感歎技術的日新月異。
但我也是謹遵古訓,盡量離@HtmlHelper控件遠一點,多使用原始的Html元素。在頭部要寫清楚傳過來的Model為AdminUserDTO[],而且生成的最終html檔案的title為Admin List
套用的模闆為H-ui,看起來挺好的
二、細節和體會
過程中,有一些細節和收獲也記錄一下
1. 為了預防CSRF攻擊,Ajax的GET請求被禁用,是以Ajax請求不要忘了設定為POST類型。關于CSRF有待學習。
2. 之前一直不明白MVC項目為什麼在View檔案夾下還有一個web.config,現在知道了他的作用之一便是為了給cshtml中的代碼指定命名空間
3. 現代浏覽器多有預加載功能,一些直接寫在html屬性的超連結可能被浏覽器提前執行,是以删除等操作最好寫在事件中
4. 看一些例子,有時一個視圖會有多個Model,本次項目也有不少這樣的情況,例如AdminUserAddModel與AdminUserAddViewModel,Model是用來在Controller與View之間互動資料的,分成兩個Model時,一般是為了應對展示的資料(GET)與儲存的資料(POST)存在差異的情況,如AdminUserAddModel用于儲存(View->Controller),AdminUserAddViewModel用于展示(Controller->View)。
注:
課程内容來自如鵬網(www.rupeng.com),專注于大學生就業的線上教育平台;
ASP.NET MVC課程 http://www.rupeng.com/News/9/640.shtml
歡迎關注我的個人公衆号【菜鳥程式員成長記】