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 标签助手 上一章节我们介绍了视图导入,学习了 ...
随机推荐
- 强力推荐微信小程序之简易计算器,很适合小白程序员
原文链接:https://mp.weixin.qq.com/s/gYF7GjTRpeZNoKPAPI9aXA 1 概述 前几日QQ群里的朋友问我有没有计算器小程序案例,今天我们说下小程序计算器,然后就 ...
- C++开发人脸性别识别教程(10)——加入图片的人脸检測程序
现在我们的MFC框架已经初具规模,能够读取并显示目录下的图片.在这篇博文中我们将向当中加入人脸检測的程序. 一.人脸检測算法 这里我们使用OpenCv封装的Adaboost方法来进行人脸检測,參见:C ...
- [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 ...
- 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 ...
- 使用xerces库的一个注意事项
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用xerces库解析xml文件,结果出现这样一些链接错误: public: static classxercesc_ ...
- stm32 DMA+timer+DAC
是有延迟的:
- [转载]Ocelot简易教程(六)之重写配置文件存储方式并优化响应数据
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9807125.html 很多人都说配置文件的配置很繁琐,如果存储在数据库就方便很多,可以通过自定义UI界面 ...
- 【u122】迎接仪式
Time Limit: 1 second Memory Limit: 128 MB [问题描述] LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路 ...
- 离线下载chrome
https://gallery.technet.microsoft.com/Google-Chrome-version-f0619a1f
- iframe父页面与子页面的交互
iframe子页面调用父页面的变量.js方法.元素(非跨域): window.parent.varName; //获取父页面js全局变量 window.parent.fnName; //获取父页面js ...