原文:ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程

ASP.NET Core 视图

花了几章节,终于把 ASP.NET Core MVC 中的 C 控制器涉及的七七八八了,本章节我们来学习下 V,也就是视图部分。

ASP.NET Core MVC 应用程序中,没有任何内容像页面,并且在 URL 中指定路径时, 它也不包含与页面直接对应的任何内容。 ASP.NET Core MVC 应用程序中最接近页面的东西被称为视图

是不是很拗口,哈哈,页面就是一个服务器端返回的数据,但这个数据并不是直接存在的,而是由控制器、模型、视图三大部分相作用的结果。

这是因为,也是你知道的,在 ASP.NET MVC 应用程序中,所有传入的请求均由控制器处理,并将这些请求映射到控制器相应的方法上

控制器方法可能会返回一个视图,也可能执行其它类型的操作,例如重定向到另一个控制器方法上

如果使用 MVC 框架,最流行的创建 HTML 的方法是使用 ASP.NET MVC 的 Razor 视图引擎

为了使用 Razor 视图引擎,一个控制器方法将产生一个 ViewResult 对象,而一个 ViewResult 可以携带我们想要使用的 Razor 视图的名称

该视图是文件系统上的文件,且 ViewResult 还可以将一个模型对象带到视图中,且视图可以在创建 HTML 时使用该模型对象

当 MVC 框架看到控制器方法返回一个 ViewResult 时,框架将在文件系统上查找对应的视图,执行视图生成 HTML,然后框架会将这个 HTML 作为响应发送回客户端

ASP.NET MVC 视图范例

现在,我们通过一个简单的范例来了解视图如何在我们的应用程序中工作

我们将更改 HomeController 类中的 Index 方法,返回一个 ViewResult 对象

完整代码如下

using System;
using Microsoft.AspNetCore.Mvc; using HelloWorld.Models; namespace HelloWorld.Controllers
{
public class HomeController: Controller
{
public ViewResult Index()
{
var employee = new Employee { ID = 1, Name = "语飞"};
return View();
}
}
}

HomeController 中,不再是生成 ObjectResult,而是返回 View() 方法返回的内容

View() 方法不返回 ObjectResult 对象,而是会创建一个新的 ViewResult 对象, 因此我们必须将 Index 方法的返回类型更改为 ViewResult

View() 方法可以接受一些可选的参数,当然了,我们调用这个方法时没有传递任何其它参数

我们保存下文件 HomeController.cs,重启应用程序,刷新浏览器,显示结果如下

出错了,这个错误的意思是没有找到视图文件 Index.cshtml

不过我们可以从这个错误中发现很多有用的信息:

  1. 默认情况下,视图查找的路径,就是在根目录下的 ViewsPages 目录下查找文件
  2. 默认情况下,C# ASP.NET Core MVC 项目中的视图以 .cshtml 作为扩展名
  3. 如果不提供其它任何信息,则视图位置和视图文件名将由 ASP.NET MVC 默认决定
  4. 如果我们需要从 HomeController 的 Index 操作中渲染视图,那么 MVC 框架查找该视图的第一个位置为 Views文件夹
  5. 接下来,查找视图时将会检查控制器目录 Home 文件夹,查找名为 Index.cshtml的文件,文件名以 Index 开头,因为我们处于 Index 操作中
  6. 如果在控制器目录中没有找到对应视图,接下来会尝试在 Shared 文件夹中查找视图

为了使我们的视图结果正常工作,我们必须在正确的位置创建这个 Index.cshtml 文件。

因此,在我们的项目中,我们首先需要添加一个包含所有视图的文件夹,并将其命名为 Views

然后在 Views 文件夹中,我们将为与 HomeController 关联的视图添加另一个文件夹 Home

这些目录创建完成后,结果如下

接下来在右键点击 Home 目录,然后选择 添加 -> 新建文件 打开新建文件对话框

如果你的电脑是 Windows ,则是 添加 -> 新建项

在新建文件对话框中,选中左边的 ASP.NET Core,然后选中右边的 MVC 视图页面

如果你的电脑是 Windows ,则是先选中左边的 ASP.NET Core , 然后选中右边的 Razor 视图

在名称中输入 IndexIndex.cshtml ( Windows 上 ),然后点击右下角的 新建添加 ( Windows 上 ) 创建 Index.cshtml 视图文件

创建完成后,目录结构如下

Index.cshtml 中的内容如下

@*
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}

现在,我们编辑下 Index.cshtml ,输入以下内容

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Home 控制器下的 Index 方法</title>
</head>
<body>
<h1>欢迎!</h1>
<div>这个消息来自 Home 控制器下的 Index 的视图文件 index.cshtml </div>
</body>
</html>

我们在 *.cshtml 中输入了 HTML 标记,这些 .cshtml 中的任何 HTML 标记都会被直接发送到客户端。

保存 Index.cshtml 文件,重启应用程序,刷新浏览器,可以看到输出如下

现在,Home 控制器通过 ViewResult 将该视图以及该 index.cshtml 文件中的所有标记呈现给客户端

视图参数

让我们回到 HomeController 控制器中的 View 方法

View() 方法有几个不同的重载,我们可以将员工模型作为参数传递给它

using System;
using Microsoft.AspNetCore.Mvc; using HelloWorld.Models; namespace HelloWorld.Controllers
{
public class HomeController: Controller
{
public ViewResult Index()
{
var employee = new Employee { ID = 1, Name = "语飞"};
return View(employee);
}
}
}

View() 方法只需要一个模型对象,并使用默认视图,即 Index

这里,我们只想传入该模型信息并在 Index.cshtml 中使用该模型

修改 Index.cshtml,如以下程序中所示

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Home 控制器下的 Index 方法</title>
</head>
<body>
<h1>欢迎!</h1>
<div>这个消息来自 Home 控制器下的 Index 的视图文件 index.cshtml</div>
<div>@Model.Name</div>
</body>
</html>

当我们在 Razor 视图中使用 @ 符号时,Razor 视图引擎会将我们输入的任何内容视为 C# 表达式

Razor 视图包含一些我们可以在 C# 表达式中访问的内置成员,最重要的成员之一就是模型 ( Model )

但我们使用 @Model 时,意思就是使用从控制器传入视图的模型对象,因此 @ Model.Name 则表示在视图内显示员工姓名

保存所有的文件,重启应用程序,刷新浏览器,可以看到输出如下

 
 

ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程的更多相关文章

  1. ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图导入 上一章节我们介绍了视图起始页,学习 ...

  2. ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图起始页 上一章节中我们介绍了布局视图, ...

  3. ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 布局视图 上一章节中我们学习了如何使用 EF ...

  4. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...

  5. ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新增用户 上一章节我们实现了一个注册表单,但也留了一些东西还没完成, ...

  6. ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 用户注册 上一章节我们终于迁移完了 Identity 的数据,也创建 ...

  7. ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...

  8. ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...

  9. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

随机推荐

  1. 【t086】防护伞

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 据说2012的灾难和太阳黑子的爆发有关.于是地球防卫小队决定制造一个特殊防护伞,挡住太阳黑子爆发的区域 ...

  2. HASH算法具体解释

    做了几年开发,一直不理解HASH算法的原理.今天偶从百度知道上看到一个牛人神一样的理解: 这个问题有点难度.不是非常好说清楚. 我来做一个比喻吧. 我们有非常多的小猪,每一个的体重都不一样,假设体重分 ...

  3. [转载]netcore 使用surging框架发布到docker

    demo运行在windows的docker中,系统是win10,所以需要先下载Docker for Windows,安装完毕后系统会重启,然后桌面上可以找到Docker for Windows的快捷图 ...

  4. ArcGIS Engine 编辑介绍

    转自原文 ArcGIS Engine 编辑介绍 IWorkspaceEdit接口是ArcGIS Engine 实现空间数据编辑的重要接口,它让程序启动或者停止一个编辑流程,在这个编辑流程内,可以对数据 ...

  5. Kolya and Tandem Repeat

     Kolya and Tandem Repeat time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  6. CoreLocation定位

    nCoreLocation   n简介 n在移动互联网时代,移动app能解决用户的很多生活琐事,比如 p导航:去任意陌生的地方 p周边:找餐馆.找酒店.找银行.找电影院 p n在上述应用中,都用到了地 ...

  7. JVM性能调优实践——JVM篇

    前言 在遇到实际性能问题时,除了关注系统性能指标.还要结合应用程序的系统的日志.堆栈信息.GClog.threaddump等数据进行问题分析和定位.关于性能指标分析可以参考前一篇JVM性能调优实践-- ...

  8. WPF入门(三)->几何图形之不规则图形(PathGeometry) (2)

    原文:WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 上一节我们介绍了PathGeometry中LineSegment是点与点之间绘制的一条直线,那么我们这一节来看 ...

  9. Access control differentiation in trusted computer system

    A trusted computer system that offers Linux® compatibility and supports contemporary hardware speeds ...

  10. hdu1693插头dp(多回路)

    题意:在n*m的矩阵中,有些格子有树,没有树的格子不能到达,找一条或多条回路,吃全然部的树,求有多少中方法. 这题是插头dp,刚刚学习,不是非常熟悉,研究了好几天才明确插头dp的方法,他们老是讲一些什 ...