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 标签助手 上一章节我们介绍了视图导入,学习了 ...
随机推荐
- 29、从零写USB摄像头驱动之通过urb接受数据后上报数据是函数中fid的作用
原因分析如下: 视频数据是由一帧一帧数据组成,为了防止数据错乱,会给每一帧数据分配一个frameid,从第0帧开始,接着是第1帧,接着又是第0帧这样交错进行的,对usb摄像头来说每一帧数据来源于多个包 ...
- [Node] Using dotenv to config env variables
Install: npm install dotenv --save For example, we can store the sensitive information or env relate ...
- spring里头各种获取ApplicationContext的方法
为啥写这个文章呢?spring各个版本不同,以及和系统框架套在一起不同,导致获取的方式不同,网络上各种版本,太乱了,写获取方式的人都不写这个获取方式是在本地还是在WEB,在那种应用服务器下,在spri ...
- Lucene学习总结之六:Lucene打分公式的数学推导 2014-06-25 14:20 384人阅读 评论(0) 收藏
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene ...
- 嵌入式linux串口通信自发自收测试程序
/*串口自收自发程序主函数*/#include"uart_api.h"int main(){ int fd; char buff[BUFFER_SIZE]; char buff2 ...
- 微信小程序初步运营方案
小程序的运营方案有很多种,目前我们遇到两个事情需要解决:1.问答的内容,这块也是大家比较关心的话题.内容的定位和细节. 2.预热与推广,就这两个问题,我列出了一些自己的想法和小程序初步运营方案,有不足 ...
- [Angular Directive] Write a Structural Directive in Angular 2
Structural directives enable you to use an element as a template for creating additional elements. C ...
- Android自己主动检測版本号及自己主动升级
步骤: 1.检測当前版本号的信息AndroidManifest.xml-->manifest-->android:versionName. 2.从server获取版本号号(版本号号存在于x ...
- web项目开启日志打印
原文链接:http://blog.csdn.net/qq_37936542/article/details/79045188 参考文章地址:点击打开链接,写的很清晰 一:导入log4j包或依赖 ...
- 手机端自适应布局demo
原型如下: 要求如下:适应各种机型 源码如下: <!DOCTYPE html > <html> <head> <meta http-e ...