原文: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. 强力推荐微信小程序之简易计算器,很适合小白程序员

    原文链接:https://mp.weixin.qq.com/s/gYF7GjTRpeZNoKPAPI9aXA 1 概述 前几日QQ群里的朋友问我有没有计算器小程序案例,今天我们说下小程序计算器,然后就 ...

  2. C++开发人脸性别识别教程(10)——加入图片的人脸检測程序

    现在我们的MFC框架已经初具规模,能够读取并显示目录下的图片.在这篇博文中我们将向当中加入人脸检測的程序. 一.人脸检測算法 这里我们使用OpenCv封装的Adaboost方法来进行人脸检測,參见:C ...

  3. [CSS] Control Image Aspect Ratio Using CSS

    Resize images and videos to fill their parent and maintain their aspect ratio with pure CSS. The new ...

  4. Your algorithm's runtime complexity must be in the order of O(log n).

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  5. 使用xerces库的一个注意事项

    作者:朱金灿 来源:http://blog.csdn.net/clever101 使用xerces库解析xml文件,结果出现这样一些链接错误: public: static classxercesc_ ...

  6. stm32 DMA+timer+DAC

    是有延迟的:

  7. [转载]Ocelot简易教程(六)之重写配置文件存储方式并优化响应数据

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9807125.html 很多人都说配置文件的配置很繁琐,如果存储在数据库就方便很多,可以通过自定义UI界面 ...

  8. 【u122】迎接仪式

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路 ...

  9. 离线下载chrome

    https://gallery.technet.microsoft.com/Google-Chrome-version-f0619a1f

  10. iframe父页面与子页面的交互

    iframe子页面调用父页面的变量.js方法.元素(非跨域): window.parent.varName; //获取父页面js全局变量 window.parent.fnName; //获取父页面js ...