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("")来声明特定的路由