Asp.Net Core 入门(四)—— Model、View、Controller
和我们学习Asp.Net MVC一样,Asp.Net Core MVC的Model、View、Controller也和我们熟悉的Asp.Net MVC中的相似。不同的是我们在使用Asp.Net Core MVC的时候需要注入MVC。
Asp.Net Core MVC注入 MVC 的方法有两种,一种是AddMvcCore(),它只是注入了MVC的一些核心的东西,不包括像返回的ViewResult、JsonResult等,如果要使用完整的MVC,需要使用另一种注入方式 AddMvc() 进行注入,AddMvc()里调用了AddMvcCore()。
下面我们就来详细说说模型、视图、控制器。
我们新建完一个MVC项目后,模板帮我们生成了Models、Views、Controllers三个文件夹,一般我们把新建的Model放在Models中,但实际项目上我们通常会新建一个项目放model。
MVC 中的模型包含一组表示数据的类和管理该数据的逻辑。View和Controller之间可以通过Model来传递数据。 我们定义一个学生类,一个学生仓储接口还有一个该接口的实现。
/// <summary>
/// 学生模型
/// </summary>
public class Student
{
public int Id { get; set; } public string Name { get; set; } public string ClassName { get; set; } public string Email { get; set; }
}
public interface IStudentRepository
{
Student GetStudent(int id);
}
public class MockStudentRepository : IStudentRepository
{
private List<Student> _studentList;
public MockStudentRepository()
{
_studentList = new List<Student>();
_studentList.AddRange(new List<Student>() {
new Student(){Id=,Name="张三",ClassName="三年一班",Email="zhangshang@qq.com"},
new Student(){Id=,Name="李四",ClassName="三年一班",Email="zhangshang@qq.com"},
new Student(){Id=,Name="王五",ClassName="三年一班",Email="zhangshang@qq.com"},
new Student(){Id=,Name="赵六",ClassName="三年一班",Email="zhangshang@qq.com"},
new Student(){Id=,Name="钱七",ClassName="三年一班",Email="zhangshang@qq.com"},
});
} public Student GetStudent(int id)
{
return _studentList.Where(s => s.Id == id).FirstOrDefault();
}
}
新建一个HomeController,添加代码
private readonly IStudentRepository _studentRepository;
//构造函数注入
public HomeController(IStudentRepository studentRepository)
{
_studentRepository = studentRepository;
} public IActionResult Index(int id)
{
return View(_studentRepository.GetStudent(id));
}
添加视图Index.cshtml
@model StudentManagement.Models.Student
@{
ViewData["Title"] = "Index";
} <div>
@Model.Id
@Model.Name
@Model.ClassName
@Model.Email
</div>
我们可以看到,Controller通过Repository获取到Student的数据后将其作为View的参数返回了,而在视图Index我们可以使用@model StudentManagement.Models.Student来引用模型。
当然,将数据传递到视图还有其他的方式,这一点和我们在Asp.Net MVC的时候是一样的,我们可以总结一下:
1、ViewData:弱类型的字典对象,使用string类型的键值对,运行时动态解析,没有智能感知,编译也没有检查类型。
2、ViewBag:ViewData的包装器,都创建了一个弱类型的视图,使用动态属性来存储和查询数据。
3、强类型视图:在视图中使用@model指令指定模型类型,使用@Model访问模型对象属性,提供编译类型检查和智能提示。
需要注意的是,在我们HomeController的构造函数里,形参 IIStudentRepository 是怎么传入的呢?我们知道Asp.Net Core自带了依赖注入容器,在前面讲Startup文件时候知道ConfigureServices方法是用来注入服务的,所以我们需要将我们的 IIStudentRepository 注入进去,否则运行会抛异常。
services.AddTransient<IStudentRepository, MockStudentRepository>();
在返回VIew的时候,上面例子我们传了一个model作为参数,实际上它也可以传递视图名称,在传递视图名称的时候可以使用绝对路径或相对路径,绝对路径必须指定.cshtml文件扩展名,相对路径不用带扩展名.cshtml。
我们定义一个Detail视图,然后调用return View("Detail")
public ObjectResult Detail()
{
return new ObjectResult(_studentRepository.GetStudent());
}
return View("Detail");
我们使用的是相对路径,那么.Net Core会执行下面的操作去查找视图
1、在“/ Views / Home /”文件夹中查找,找到就返回,找不到继续往第2步找。
2、在“/ Views / Shared /”文件夹中查找,找到就返回,找不到继续往第3步找。
3、在“/ Pages / Shared /”文件夹中查找, 如果找到视图文件,则视图生成的 HTML 将发送回发出请求的客户端。如果找不到视图文件,将收到错误。
The view 'Detail' was not found
最后,讲一下ViewModel模型视图的一个概念,很多时候我们的视图需要的数据往往比我们定义的Model能提供的数据要多,这时候就可以使用ViewModel了,在实际项目开发中,ViewModel也等于DTO(数据传输对象)。至于ViewModel的使用和Model一样,传递到View中进行显示。
Asp.Net Core 入门(四)—— Model、View、Controller的更多相关文章
- ASP.NET CORE 入门教程(附源码)
ASP.NET CORE 入门教程 第一课 基本概念 基本概念 Asp.Net Core Mvc是.NET Core平台下的一种Web应用开发框架 符合Web应用特点 .NET Core跨平台解决方案 ...
- MVC(Model View Controller)框架
MVC框架 同义词 MVC一般指MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...
- 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)
在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识, ...
- ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门
一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...
- ASP.NET Core入门(一)
大家好,很荣幸您点了开此篇文章,和我一起来学习ASP.NET Core,此篇文字为<ASP.NET Core入门>系列中的第一篇,本系列将以一个博客系统为例,从第一行代码,到系统发布上线( ...
- 小白开学Asp.Net Core 《四》
小白开学Asp.Net Core<三> —— 使用AspectCore-Framework 一.AspectCore-Frame ...
- Model View Controller (MVC) Overview
By Rakesh Chavda on Jul 01, 2015 What is MVC?Model View Controller is a type of user interface archi ...
- 【翻译】ASP.NET Core 入门
ASP.NET Core 入门 原文地址:Introduction to ASP.NET Core 译文地址:asp.net core 简介 翻译:ganqiyin ...
- MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作
MVC模式(Model View Controller): Model:DAO模型 View:JSP 在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若 ...
随机推荐
- 【旧文章搬运】Windbg+Vmware驱动调试入门(三)---Windbg基本调试入门
原文发表于百度空间,2009-01-09========================================================================== 这一节的内 ...
- (二十五)后台开发-分类信息的curd -展示所有实现
案例1-分类信息的curd 步骤分析: 左边的dtree: 1.导入dtree.js 2.导入dtree.css 3.创建一个div 添加样式 class="dtree" 4.在d ...
- 洛谷 - P1002 - 过河卒 - 简单dp
https://www.luogu.org/problemnew/show/P1002 方程很好想,题目也很暴力.感谢题目提示数据会很大. #include<bits/stdc++.h> ...
- python 类属性和实例属性、方法 访问权限问题
class Animal: cls_attr = 'cls_attr' _cls_attr = '_cls_attr' __cls_attr = '__cls_attr' def __init__(s ...
- bzoj 2084: [Poi2010]Antisymmetry【回文自动机】
manacher魔改,hash+二分都好写,但是我魔改了个回文自动机就写自闭了orz 根本上来说只要把==改成!=即可,但是这样一来很多停止条件就没了,需要很多特判手动刹车,最后统计一下size即可 ...
- bzoj 3173: [Tjoi2013]最长上升子序列【dp+线段树】
我也不知道为什么把题看成以插入点为结尾的最长生生子序列--还WA了好几次 先把这个序列最后的样子求出来,具体就是倒着做,用线段树维护点数,最开始所有点都是1,然后线段树上二分找到当前数的位置,把这个点 ...
- IT兄弟连 JavaWeb教程 请求转发案例
CheckServlet类与OutputServlet类之间为请求转发关系.在web.xml文件中,为CheckServlet映射的URL为"/check",为OutputServ ...
- NowCoder数列
题目:https://www.nowcoder.com/questionTerminal/0984adf1f55a4ba18dade28f1ab15003 #include <iostream& ...
- 连接php/mysql
1 安装php5.6 首先确保mysql已安装 ./configure --prefix=/app/php-5.6.36 --with-mysql=mysqlnd --enable-mysqlnd - ...
- WOJ1019 所有的M数
题目链接: WOJ1019 题目分析: 单调栈维护,读一个进来,如果前面的比它大就弹出来,然后压栈里(反正它在最右边) 压进栈里输出它前面那个数就好了 O(n)扫一遍就能过 真的水得不能再水的题了-- ...