ASP.NET Core MVC学习笔记(二)

一、应用程序分层设计分为用户展现层(MVC),业务逻辑处理层,数据访问读取层。

浏览器链接-(request)0-》controller-->model-->data source
浏览器<--controller-->view
路由规则将u'r'l映射到controller action方法

在asp.net core 中安装MVC
步骤1:将所需的mvc服务添加到asp.net core中的依赖注入容器中

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

步骤2:添加MVC中间件到我们的请求处理管道中

app.UseMvcWithDefaultRoute();

AddMvcCore()方法只会添加最核心的MVC服务,AddMvc()方法添加了所有必须的MVC服务,AddMvc()方法会在内部调用AddMvcCore()方法。

二、ASP.NET Core MVC中的Model
Model=一个集合类=data(数据)+业务数据
ASP.NET Core依赖注入
ASP.NET Core依赖注入容器注册服务
AddSingleton(),AddTransient(),AddScoped()

如:

services.AddSingleton<IStudentRepository,MockStudentRepository>();

services.AddTransient<Db>();
services.AddTransient<BannerService>();

依赖注入的亮点:低耦合;提供了高测试性,使单元测试更加的容易

三、ASP.NET Core MVC中的Controller
当来自浏览器的请求到达我们的应用程序时,作为MVC设计模式中的控制器,它处理传入的http请求并响应用户操作。
控制器构建模型(Model)
如果我们正在构建API,则将模型数据返回给调用方;或者选择“View视图”并将模型数据传递到视图,然后视图生成所需的HTML来显示数据。

四、ASP.NET Core MVC中的View
视图文件具有.cshtml的扩展名,
视图文件是带有嵌入Razor标记的HTML模板,
可能包含Controller提供给它的Model的业务数据。

自定义视图发现
view()或view(object model):查找与操作方法同名的视图文件
view(string viewName):可查询自定义名称的视图文件,可以指定视图名称或视图文件路径,视图文件路径可以是绝对路径,也可以是相对路径,绝对路径必须指定.cshtml扩展名,使用相对路径时,不用带扩展名.cshtml。
view(string viewName,object model)

五、从控制器传递数据到视图
将数据从控制器传递到视图的方法:ViewData,ViewBag,强类型视图。
ViewData:是弱类型的字典(dictionary)对象,使用string类型的键值,存储和查询viewdata字段中的数据,运行时动态解析,没有智能感知,编译时也没有类型检查。

Controller

ViewData["PageTitle"] = "学生详情";
ViewData["Student"] = model;
.cshtml
@using xxxx.Models
<h3>@ViewData["PageTitle"]</h3>
@{
var student = ViewData["Student"] as Student;
}
<div>
姓名:@student.Name
</div>

 Controller

//将PageTitle和Student模型对象存储在ViewBag
//我们正在使用动态属性PageTitle和Student
ViewBag.PageTitle = "学生详情";
ViewBag.Student = model;

.cshtml
<h3>@ViewBag.PageTitle</h3>
<div>
姓名:@ViewBag.Student.Name
</div>

ViewData和ViewBag对比
ViewBag是ViewData的包装器
它们都创建了一个弱类型的视图
ViewData使用字符串键名,来存储和查询数据。
ViewBag使用动态属性来存储和查询数据。
均是在运行时动态解析,均不提供编译时类型检查,没有智能提示。
首选方法是使用强类型模型对象,将数据从控制器传递到视图。

ASP.NET Core MVC中使用强类型视图
创建强类型视图
在视图中使用@model指令指定模型类型
@model xxxx.Models.Student
使用@Model访问模型对象属性
<div>
姓名:@Model.Name
</div>
<div>
邮箱:@Model.Email
</div>
强类型视图提供编译时类型检查和智能提示

ASP.NET Core MVC中的ViewModel(类似于DTO)
模型对象无法满足视图所需的所有数据时,就需要使用ViewModel了

1 //实例化HomeDetailsViewModel并存储student详细信息和pageTitle
2 HomeDetailsViewModel homeDetailsViewModel = new HomeDetailsViewModel()
3 {
4     student = _studentRepository.GetStudent(2),
5     pageTitle = "学生详细信息"
6 };

六、ASP.NET Core MVC中的布局页面的使用
让web应用程序中所有的视图保持外观一致性。布局视图看起来像ASP.NET Web Form中的母版页。布局视图也具有.cshtml扩展名。在ASP.NET Core MVC中,默认情况下布局文件名为_Layout.cshtml。布局视图文件通常放在“Views/Shared”的文件夹中。在一个应用程序中可以包含多个布局视图文件。

布局视图文件中的Sections使用
布局试图中的节点,提供了一种方法来让某些页面元素有组织的放置在一起。
Section可以强制性使用或者为可选择性使用。
需要渲染Section的时候调用RenderSection()方法。
母版页
@RenderSection("Scripts", required: false)
.cshtml
@section Script{
<script src="~/js/CustomScript.js"></script>
}

ASP.NET Core MVC中的_ViewStart.cshtml
ViewStart中的代码会在单个视图中的代码之前执行。
移动公用代码到ViewStart视图中,如给布局视图文件设置属性。
ViewStart减少了代码冗余,提高了可维护性
ViewStart文件支持分层。

ASP.NET Core MVC中的_ViewImports.cshtml
_ViewImports.cshtml文件通常放在Views文件夹中。
ViewImports用于包含公共命名空间。
需要使用@using指令包含公共命名空间。
_ViewImports文件还支持以下指令:@addTagHelper,@removeTagHelper,@tagHelpPrefix,@model,@inherits,@inject。
_ViewImports文件支持分层。

原文地址:https://www.cnblogs.com/Lvkang/p/11718413.html