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 重定向和请求的转发: 若 ...
随机推荐
- Linux的终端类型
终端是一个很重要的外设,用过终端设备的人都知道如果设备类型不对就会有乱字符,也可用仿真终端软件如netterm试验一下,Linux的终端信息放在 /usr/share/terminfo下,在这个目录的 ...
- 动画浅析-CAAnimation和CATransition
出处: http://blog.csdn.net/mad2man/article/details/17260887 //动画播放完之后不恢复初始状态 baseAnimation.removed ...
- POJ3250【单调栈】
思路: 维护一个单调递增的栈,对于栈顶元素<=新值来说,那么后面的,我一定看不到了,pop掉以后,那么这时候的栈的大小就是我能看到的这个刚刚pop出去元素的个数. //#include < ...
- Visual Studio 的Build Event 使用
rmdir Configuration mkdir Configuration Copy "$(ProjectDir)Configuration\Spec.config" &quo ...
- MyEclipse中安装SVN插件的最有效的方法
(1)下载svn插件:http://subclipse.tigris.org/files/documents/906/49209/site-1.8.8.zip (2)解压svn包,找到其中的两个文件夹 ...
- Luogu P1607 庙会班车【线段树】By cellur925
题目传送门 据说可以用贪心做?算了算了...我都不会贪.... 开始想的是用线段树,先建出一颗空树,然后输进区间操作后就维护最大值,显然开始我忽视了班车的容量以及可以有多组奶牛坐在一起的信息. 我们肯 ...
- Ubuntu 18.04 LTS 安装后 各种问题以及解决方案
1. root的初始密码,默认是不知道的,需要进行设置 a. 进入终端自己的用户 b. 输入 sudo passwd回车 c. 输入新密码,回车,重复,回车,搞定 d. su 一下,就可以了 2. ...
- April Fools Contest 2017 B
Description Programmers' kids solve this riddle in 5-10 minutes. How fast can you do it? Input The i ...
- Chrome下font-size小于12px的解决办法
自从Chorme取消了-webkit-text-size-adjust,这个问题又变得令人烦恼起来. 好在我们可以利用-webkit-transform这个私有属性. .box{ -webkit-tr ...
- POJ 1692 Crossed Matchings dp[][] 比较有意思的dp
http://poj.org/problem?id=1692 这题看完题后就觉得我肯定不会的了,但是题解却很好理解.- - ,做题阴影吗 所以我还是需要多思考. 题目是给定两个数组,要求找出最大匹配数 ...