ASP.Net Core -- Controller返回View
Controller
MVC這種架構模式在我們的日常開發中使用的還是比較多的,因為它比較簡便,可以讓我們很輕鬆的構建出HTML頁面,或者是基於HTTP的API。今天學習一下從控制器中返回資料到View的內容。在ASP.Net Core這套框架裡要使用MVC需要新增中介軟體,配置路由,之前講過了,這裡不說了,今天主要還是瞭解一下從Controller返回給View的資料型別或者格式有哪些。
先來看一個例子,在MVC中新增 app.UseMvcWithDefaultRoute()
這個中介軟體後就會預設找HomeController裡的Index方法,如下:
HomeController類裡直接寫了一個string型別的方法,這個類並沒有繼承於任何父類,方法直接返回一個字串。啟動專案,輸出"Hello form HomeController",這樣功能雖然可以實現,但是效果不好,因為我們使用是一個string型別,它自己把事全做了,直接返回字串,比較單一。下邊我們將這個類繼承Controller父類,Controller父類裡封裝了好多方法,可以讓我們很簡單的把資料返回給客戶端。資料型別也可以是很多種,比如簡單的引用型別和值型別,或者一些相對比較複雜的型別。
IActionResult
繼承於Controller這個物件要求實現IActionResult這個介面,其實有好多種結果物件都實現了這個介面。如圖:
我們可以看到,當HomeController類繼承Controller父類後,當寫this.的時候,裡邊有很多東西,各種各樣的屬性或者方法,這些內容就是Controller上下文的資訊,比如使用:this.ControllerContext.ActionDescriptor.ActionName
獲取Action的名稱!還可以使用this.HttpContext.Request.Headers
來操作HttpContext裡的request或者response等等.....,但是不建議這樣做,不建議直接在動作裡直接操作HttpContext,這樣不利於單元測試,同時我們還可以獲取一些方法,比如:this.Ok()
然後再對OkObjectResult進行反編譯,如下:
再對父類ObjectResult進行反編譯,如下:
可以看到,這個方法返回的確實是IActionResult,以及其他的方法,也都是返回的這個型別,所以以後進行開發時候,一般都會用這個型別作為返回型別,當然,也可以使用其他的型別,但是其他型別也一樣實現的是IActionResult這個型別,可能功能不多而已。比如:
返回的型別是ContentResult型別,返回的也是字串,其實這個ContentResult型別也實現了繼承了IActionResult這個介面!
為什麼要使用IActionResult這個型別呢?
返回View
返回檢視我們需要用到Razor引擎:
現在我們返回檢視,如下:
這個時候就會預設找Views資料夾下的Home資料夾裡邊的Index.cshtnl檔案,因為返回的View()裡邊啥也沒寫,預設找和動作名相同的檔案,如果手動寫上,就會尋找們自定義的檔案如下:
這樣就會找Create.cshtml檔案。
現在把Student這個物件返回到檢視,如下:
那麼在這個物件到檢視頁需要用Model表示,後端返回的物件名稱可以隨便起,但是檢視頁就叫Model,這個是C#裡的物件,不是HTML獲取其它內容,如下:
我們可以看到,目前它是dynamic型別的,也就是匿名的,這樣容易出問題,如果後端返回的型別在專案中沒有,或者沒找到,就報錯了,我們需要給他指定說明我們需要的型別,如下:
在檢視頁的頂端加入:@model Tutorials.Web.Model.Student
這個model是小寫的,就好像using一樣,指定當前檢視頁使用哪一個模型,如下:
可以看到,型別從dynamic變成了Student型別,這樣就可以直接使用物件的形式獲取裡邊的內容,如下:
再把資料修改一下,改成集合的形式!
新增一個服務:
實現介面:
註冊服務:
呼叫服務:
檢視頁修改引用,因為現在是集合,不是單個物件了,所以:
最後渲染資料:
最後資料渲染成功!
關於Controller的內容就暫時學習到這!!!