ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文: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
不过我们可以从这个错误中发现很多有用的信息:
- 默认情况下,视图查找的路径,就是在根目录下的
Views或Pages目录下查找文件 - 默认情况下,C# ASP.NET Core MVC 项目中的视图以
.cshtml作为扩展名 - 如果不提供其它任何信息,则视图位置和视图文件名将由 ASP.NET MVC 默认决定
- 如果我们需要从 HomeController 的 Index 操作中渲染视图,那么 MVC 框架查找该视图的第一个位置为
Views文件夹 - 接下来,查找视图时将会检查控制器目录
Home文件夹,查找名为Index.cshtml的文件,文件名以Index开头,因为我们处于Index操作中 - 如果在控制器目录中没有找到对应视图,接下来会尝试在
Shared文件夹中查找视图
为了使我们的视图结果正常工作,我们必须在正确的位置创建这个 Index.cshtml 文件。
因此,在我们的项目中,我们首先需要添加一个包含所有视图的文件夹,并将其命名为 Views。
然后在 Views 文件夹中,我们将为与 HomeController 关联的视图添加另一个文件夹 Home
这些目录创建完成后,结果如下

接下来在右键点击 Home 目录,然后选择 添加 -> 新建文件 打开新建文件对话框
如果你的电脑是 Windows ,则是 添加 -> 新建项

在新建文件对话框中,选中左边的 ASP.NET Core,然后选中右边的 MVC 视图页面
如果你的电脑是 Windows ,则是先选中左边的 ASP.NET Core , 然后选中右边的 Razor 视图

在名称中输入 Index 或 Index.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 基础教程 - 简单教程,简单编程的更多相关文章
- ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图导入 上一章节我们介绍了视图起始页,学习 ...
- ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图起始页 上一章节中我们介绍了布局视图, ...
- ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 布局视图 上一章节中我们学习了如何使用 EF ...
- ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...
- ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新增用户 上一章节我们实现了一个注册表单,但也留了一些东西还没完成, ...
- ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 用户注册 上一章节我们终于迁移完了 Identity 的数据,也创建 ...
- ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...
- ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...
- ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...
随机推荐
- 19、opencv和v4l2的关系
分析如下: v4L2是针对uvc免驱usb设备的编程框架,而opencv是一种跨平台计算机视觉库,opencv不仅支持v4l2框架,还支持windows.os等操作系统上的摄像头框架 cvCreate ...
- 【Codeforces Round #185 (Div. 2) A】 Whose sentence is it?
[链接] 链接 [题意] 告诉你每句话; 然后每句话是谁说的和开头与结尾的一段字符串有关. [题解] 一个一个判断就好; 注意大小<5的情况 [错的次数] 在这里输入错的次数 [反思] 在这里输 ...
- FeatureLayer,FeatureDataset,FeatureClass,Feature的区别与联系总结
duckweeds原文 FeatureLayer,FeatureDataset,FeatureClass,Feature几个概念一点点总结,欢迎指教 刚学AE,其中很多概念都模糊不清.经过一段时间的摸 ...
- [Recompose] Add Local State to a Functional Stateless Component using Recompose
Learn how to use the 'withState' and 'withHandlers' higher order components to easily add local stat ...
- Java解惑八:很多其它库之谜
本文是依据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题76 将线程的启动方法start(),写成 ...
- SpringCloud微服务框架搭建
一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通过负载均衡设备共同对外提供服务 1.3 ...
- ArcGIS Engine 编辑- ITask
转自原文ArcGIS Engine 编辑- ITask 下面的代码是我们定制的一个工作流-给等高线赋值 namespace EngineApplication { [Guid("5b0c06 ...
- [Angular] Implementing a ControlValueAccessor
So when you need to create a ControlValueAccessor? When you want to use a custom component as form c ...
- php如何实现把多平台文件中所有的行合成一行?
php如何实现把多平台文件中所有的行合成一行? 一.总结 1.str_replace中的数组替换:str_replace(array("/r","/n",&qu ...
- iOS开发系列之三 - UITextField 使用方法小结
// 初始化输入框并设置位置和大小 UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 100, 30 ...