Controller父类会提供很多上下文的相关信息,还提供了很多封装的方法
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2
返回的对象要求实现了IActionResult接口
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_02
继承父类,并引入命名空间
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_父类_03
写this点就出现很多东西,这些就是上下文的信息。
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_04
这就获取了Controller的名字
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_05
action的name
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_06
还有一个我们熟悉的对象HttpContext对象
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_07
可以看request的Body或者Header等等的一些信息
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_08
也可以操作ResponseWrite,但是不建议这么做
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_09
不建议在Controller里面直接访问HttpContext对象,不利于单元测试
可以return OK方法
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_10
F12查看OK的源码
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_11
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_html_12
还封装了返回文件的方法,也实现了IActionResult接口
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_13
还可以使用this.Content返回一串文字
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_14
然后修改Action的返回类型为IActionResult
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_15
F12进去可以看到实际的返回类型为ContentResult
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_html_16
Action决定要做什么事,真正做这个事的是MVC框架
使用IactionResult更灵活,更利于扩展
简历model文件夹,并新建类Student类
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_父类_17
ObjectResult返回实体对象
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_18
Controller把这个学生的信息放在ObjectResult里面,到底怎么处置这个ObjectResult是有管道里的其他环节来处理的
预览,浏览器里面返回的是Json结果
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_19

Action返回视图

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_html_20

viewRresult可以附带一个model对象,视图可以使用model来创建html
View()的返回结果是ViewResult
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_21
运行起来发生错误,这里没有找到对应的cshtml页面
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_22
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_23
如果View啥都写就会找对应的Action名字的视图文件,
我们在View里面写个Student
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_html_24
运行效果,它就会去找Student.cshtml页面
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_25
建立:View/Home/Index.cshtml文件
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_html_26

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_27
运行效果
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_html_28
把st作为参数返回给view
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_父类_29
有一个特殊的变量,@Model使用这个变量来访问传过来的Model对象
@Model就表示从Action的View传过来的对象
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_30
指定@Model的具体类型,现在是个dynamic的类型
也是为了写代码的时候有只能提示
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_父类_31
使用一个指令让@Model有只能提示

这里用消息的@model它是一个指令。大写的@Model是传过来的对象,这两个容易混淆
这个指令可以提供一些信息
用小写的model来告诉大写Model它的类型
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_父类_32
这样直接把属性的字段可以点出来了
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_33
运行结果
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_34

新建文件夹Services/下面新建文件IRepository.cs
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_父类_35
现在的数据类型是Student,以后可能是其他的类型,所以这里使用泛型
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_36
这是一个接口
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_37
建立实现类,因为我们是写死的数据
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_38,所以叫做InMemeryRepository
实现接口传入Student类型
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_父类_39
创建三条学生的数据
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_40

注册服务

这里使用AddScope。表示每次Http请求会产生新的实例

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_41
Controller里面构造函数注入
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_42
这是ReSharper的插件的快捷方式
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_封装_43

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_44
view页面指定model的类型,然后循环输出数据
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_父类_45
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_asp.net core 2.2_46
这里把多余的引用去掉
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View_数据_47