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 标签助手 上一章节我们介绍了视图导入,学习了 ...
随机推荐
- css 单行图片文字水平垂直居中汇总
(1) 水平居中 a. 行内元素水平居中 因为img是行内元素(行内块级元素也一样)父级元素设置text-align:center即可,例如: <div style="width: 6 ...
- redis 的惊群处理和分布式锁的应用例子
在并发量比较高的情况下redis有很多应用场景,提升查询效率,缓解底层DBio ,下面列举两个平时开发中应用过的两个例子,欢迎各位一起讨论改进. 1 . redis 惊群处理 1.1 方案的由来 Re ...
- 【LeetCode-面试算法经典-Java实现】【096-Unique Binary Search Trees(唯一二叉搜索树)】
[096-Unique Binary Search Trees(唯一二叉搜索树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given n, how many s ...
- php 复制粘贴覆盖文件
<?php /** * 操纵文件类 * * 例子: * FileUtil::createDir('a/1/2/3'); 测试建立文件夹 建一个a/1/2/3文件夹 * FileUtil::cre ...
- 安装Win10+Ubuntu14.04双系统(uefi启动版)
说明 本教程基于个人电脑(型号:神舟K550d-i7 D1)成功安装测试发布,不同硬件环境可能有细微差异,为预防安装过程中出现意想不到的报错,重要数据请提前备份 硬件环境 cpu:Intel i7-4 ...
- [乐意黎原创] eclipse Kepler Selected SVN connector library is not available or cannot be loaded
问题描写叙述:已经安装了subversive,可是在从SCM导入maven项目时.还是提示报错(如标题),依据报错原因发如今Team>SVN中确实没有svn连接器. 折腾了半天, 硬是没有结果. ...
- php date mktime 获取时间上的各种值
echo date("Ymd",strtotime("now")), "\n"; echo date("Ymd",str ...
- Android 升级到Android Studio2.2 后打不开以前版本的项目
1.找到 build.gradle 用记事本打开,修改如下: // Top-level build file where you can add configuration options commo ...
- udp绑定信息
1. udp网络程序-端口问题 会变的端口号 重新运行多次脚本,然后在“网络调试助手”中,看到的现象如下: 说明: 每重新运行一次网络程序,上图中红圈中的数字,不一样的原因在于,这个数字标识这个网络程 ...
- [Vue] Parent and Child component communcation
By building components, you can extend basic HTML elements and reuse encapsulated code. Most options ...