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=1,Name="张三",ClassName="三年一班",Email="[email protected]"},
                new Student(){Id=2,Name="李四",ClassName="三年一班",Email="[email protected]"},
                new Student(){Id=3,Name="王五",ClassName="三年一班",Email="[email protected]"},
                new Student(){Id=4,Name="赵六",ClassName="三年一班",Email="[email protected]"},
                new Student(){Id=5,Name="钱七",ClassName="三年一班",Email="[email protected]"},
            });
        }

        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(1));
  }
 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中进行显示。

原文地址:https://www.cnblogs.com/jesen1315/p/11041688.html

时间: 2024-10-24 20:14:12

Asp.Net Core 入门(四)—— Model、View、Controller的相关文章

ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门

原文:ASP.NET Core 入门教程 7.ASP.NET Core MVC 分部视图入门 一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Razor)强类型分部视图教程 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SDK 2.1.401 ASP.NET Core 2.1.3 IDE Visual Studio Code 1

ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门

原文:ASP.NET Core 入门教程 5.ASP.NET Core MVC 视图传值入门 一.前言 1.本教程主要内容 ASP.NET Core MVC 视图引擎(Razor)简介 ASP.NET Core MVC 视图(Razor)ViewData使用示例 ASP.NET Core MVC 视图(Razor)ViewBag使用示例 ASP.NET Core NVC 视图(Razor)强类型传值(ViewModel)页示例 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10

ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用

原文:ASP.NET Core 入门教程 2.使用ASP.NET Core MVC框架构建Web应用 一.前言 1.本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 使用Visual Studio Code开发基于解决方案(sln+csproj)的项目 Visual Studio Code Solution插件( vscode-solution-explorer)基础使用介绍 基于 .NET Core web项目模板构建 ASP.NET Core MVC We

ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门

原文:ASP.NET Core 入门教程 4.ASP.NET Core MVC控制器入门 一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET Core MVC控制器操作简介返回类型示例 ASP.NET Core MVC控制器参数映射逻辑说明 ASP.NET Core MVC控制器参数映射/获取示例 2.本教程环境信息 软件/环境 说明 操作系统 Win

ASP.NET MVC 入门5、View与ViewData

View建立时有MVC View Page 和 MVC View Content Page两种类型, 前者为标准View, 后者为可继承Master母版页的View. Asp.Net MVC 默认使用WebForm作为View的, 继承关系 View->ViewPage->Page & IViewDataContainer, IViewDataContainer提供了AjaxHelper/HtmlHelper/UrlHelper实例和一系列接口定义. Controller通过ViewD

ASP.NET Core 入门教程 1、使用ASP.NET Core 构建第一个Web应用

原文:ASP.NET Core 入门教程 1.使用ASP.NET Core 构建第一个Web应用 一.前言 1.本文主要内容 Visual Studio Code 开发环境配置 使用 ASP.NET Core 构建Web应用 ASP.NET Core Web 应用启动类说明 ASP.NET Core Web 项目结构说明 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SDK 2.1.401 ASP.NET Core 2.1.3 IDE Visual Studio Code

ASP.NET Core入门(一)

大家好,很荣幸您点了开此篇文章,和我一起来学习ASP.NET Core,此篇文字为<ASP.NET Core入门>系列中的第一篇,本系列将以一个博客系统为例,从第一行代码,到系统发布上线(linux).如有错误,请联系我,让我们共同成长,进步,谢谢.下面进入正题: 首先,看到这篇文章可能是一位新手,下面由我先介绍下ASP.NET Core: ASP.NET Core 是一个新的开源和跨平台的框架,用于构建如 Web 应用.物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序.

MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作

MVC模式(Model View Controller): Model:DAO模型 View:JSP  在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若目标的相应页面不需要从request里面读取任何信息,则可以使用重定向,可以防止表单重复提交: ------------------------------------------------------------------------------------------------ Stude

【翻译】ASP.NET Core 入门

ASP.NET Core 入门 原文地址:Introduction to ASP.NET Core         译文地址:asp.net core 简介           翻译:ganqiyin [!注意] 这些说明适用于最新版本的ASP.NET Core. 旧版本入门查看? 请参阅1.1版本教程.. 安装 .NET Core. 2.创建一个新的 .NET Core 项目. 在macOS和Linux上,打开一个终端窗口. 在Windows上,打开命令提示符. dotnet new razo