MVC分层
1.Model
Model
ModelRepository(模型仓储)
2.View
3.Controller
内容协商(W3C协议)
使用:
- ConfigutationService中添加services.AddMvc().AddXmlSerializerFormatters();
- Controller返回的数据类型更新为ObjectResult或者其他符合数据协商的数据类型
作用
- 处理传入的http请求并相应用户操作
- 若正在构建API,将模型是护具返回给调用方
*或者选择View试图并将模型数据传递给视图,然后视图生成所需的Html数据
安装MVC
注册MVC
ConfigurationService添加MVC:services.AddMvc();
AddMvc和AddMvcCore区别(AddMvc内部调用AddMvcCore)
- AddMvcCore只安装了MVC的核心功能
- AddMvc安装了MVC核心功能及第三方常用方法,例如json转换等
使用MVC
app.UseMvcWithDefaultRoute()
一般写在UseStaticFile后面
这样若是出错问题,在访问静态问题件就出错,可以通过中间件短路从而减少加载UseMVC的资源
Controller到View的数据传递
传递方式
弱类型视图
ViewData
1.Controller
View
接收ViewData

概括:
弱类型字典对象
使用string字典的键值,存储和查询ViewData字典中的数据
运行时动态解析
没有智能感知,编译时也没有类型检测
即需要进行强转换

ViewBag
Controller(传递ViewBag)

View(接收ViewBag)

概括
- View Bag是ViewData的包装器
- 都创建了一个弱类型的视图
- ViewData使用字符串键名来存储和查询数据
- ViewBag使用动态属性来存储和查询数据
- 都是在运行时动态解析
- 均不提供编译时类型检查,没有智能提示
- 首选方法是使用强类型模型对象,将数据从控制器传递到视图
强类型视图
Controller
直接通过View函数传递对应实体对象

View
通过@model引入并转换

概括
视图中使用@model指定模型类型
使用@Model访问模型对象属性
ViewModel视图模型
也称数据 传输对象(DTO)
https://www.cnblogs.com/Leo_wl/p/6013762.html
ViewModels
1.新建ViewModels并新建Controller对象的方法ViewModel

2.通过ViewMode整合需要展示的数据

Controller
在controller将数据赋值给viewmodel

View
@model引入对应ViewModel数据

概括
强类型的优化版
传递List数据到视图
1.Model
Repository:新建获取数据接口

MockRepository:实现Repository接口

Controller:获取list数据并传递

View
接收list数据(可以用IEnumerable)

布局页面
View(定义全局使用)
_Layout.cshtml(Shared文件夹下新增布局文件)

其他页面定义使用

Sections(定义页面自身数据)
例如定义该主页面需要使用js文件,而其他页面不需要
_Layout.cshtml

其他页面
需要引用scripts文件

不需要则不写
_ViewStart.cshtml(视图开始)
视图开始,用于控制所有页面的Layout文件;可以写逻辑处理
一般是放在Views的根目录
可以写逻辑处理

代码

优先级
cshtml文件>cshtml文件所在的文件夹>Views文件夹
内层_ViewStart会替代上一层
Views文件不想要布局页,可以写Layout=null
Views文件使用其他布局页,可以写Layout=“Layout名”

概括
- 目的:让web应用程序所有视图保持外观一致性
- 类似于AspNet web Form的母版页
- 布局视图以.cshtml扩展名结尾,默认文件名为"_Layout.cshtml"
- 默认放在Views/Shared文件下面
- 可以包含多个布局视图文件
路由
传统路由
传统路由写法1

传统路由写法2

属性路由
可以在Controller和方法上面使用Route("")来声明特定的路由
本文深入讲解MVC架构的三个组成部分:Model(模型)、View(视图)和Controller(控制器),探讨了不同数据传递方式,包括弱类型视图、强类型视图及ViewModel视图模型的应用,并介绍了MVC的安装配置过程。
252





