2、ASP .NETCore 2.0之视图
一、Razor基础
声明:Razor不是编程语言,是服务器端标记语言。Razor是一种允许开发者在网页中嵌入服务器端代码的标记语法(主要是针对VB和C#)。
1、C#中Razor基本语法
(1)、Razor代码封装在@里面,具体@字段、@(...)、@{...};
(2)、@{..}里面的代码是C#代码,要遵从C#规范,预计以分号“;”结尾;
(3)、C#文件的扩展名是cshtml。
2、实例
2.1、字符串实例
@{
string name = "andy";
int age = 18;
}
name=@name,age=@age
结果:
2.2、循环实例

结果:
说明:Razor的注释是包含在@**@里面的。
有这个基础就ok了,其余的后面边用边介绍。
二、View视图
2.1、布局视图(Layout View)
布局视图的名称可以随意的起,但是扩展名必须是.cshtml,我们习惯上给布局视图起名为_Layout.cshtml。
2.1.1、布局视图的新建
在View文件夹下面新建一个Shared文件夹(Shared文件夹下面放置一些公共的视图页面,比如报错页面,导航页等)。然后在Shared文件夹右击选择“添加”→新建项。


2.1.3 布局页的使用。
新建Action和页面视图:


layout页面:
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
</head>
<body>
<div>菜单导航栏-当前的时间是:@DateTime.Now</div>
<div>
@RenderBody()
</div>
<div>@@关于我们 江苏省苏州市工业园区XX有限公司</div>
</body>
</html>
输出:

ViewBag.Title 的值也可以在当前的页面中赋值。
2.1.4、关于Layout页面占位:
其实这整个一个过程,可以理解为“挖坑”→“填坑”。Layout页面其他的“挖坑”。@RenderBody()这个语句可以看做是一种特殊的“挖坑”,填充它的是整个页面。
(1)、必填坑定义:@RenderSection("Header"),挖坑,坑的名称为:“Header”,并且这个坑是必填的。
(2)、非必填坑定义:@RenderSection("Footer", false),挖坑,坑的名称为:“Footer”,不是必填。
也就是RenderSection有两个重载,第一个参数为挖的坑的名称,第二个参数表示此坑是否必填。默认为true,必填。
(3)、不填显示默认值:
@if (IsSectionDefined("MyBody"))//判断是否填坑,填了:显示填坑的值,没填:显示默认值的
{
@RenderSection("MyBody")
}
else
{
<div>这个是显示默认的填MyBody"坑"的内容</div>
}
2.1.5、填坑
挖坑的方式千奇百怪,但是填坑的方式却是只有一种。以上面的Header为例:
@section Header{
我是给Header
}
当然里面可以写各种前端内容,包括css、html、JavaScript还有Razor语法等。
2.1.6、关于Layout View的说明:
如果页面不想使用Layout视图,只需要在当前的页面引用中设置Layout=null或者直接不引用即可。
2.2 ViewStart视图
ViewStart,顾名思义就是视图开始,也就是它是在视图渲染的一开始就调用的一个视图。关于ViewStart视图使用的几点说明:
(1)、视图渲染时,先查找在文件的结构中是否有ViewStart视图;
(2)、如果ViewStart在Views文件夹中,那么它将会对Views文件夹下面所有的视图起作用,其中包括Views下面的Shared;如果ViewStart在Home文件夹中,那么它对Home文件夹下面的所有视图起作用。简而言之,就是ViewStart会对它所在的文件夹层级中的所有视图文件起作用,包括子文件夹和公共文件夹中的视图。
(3)、可以有多个ViewStart文件。
2.2.1、ViewStart文件的作用
ViewStart是呈现view的启动文件,会在所有的view(.cshtml)文件执行之前执行,主要用于一些不方便或者不能再Layout中进行的统一操作。在viewstart页面可以定义一些函数或者做一些判断,用于其他页面。所有的View页面都会调用ViewStart,但不包括PartialView。PartialView的渲染不会调用ViewStart。
2.2.2 单个ViewStart实例
在Views下面新进ViewStart视图,如图:
,页面添加信息:
,新建ViewStart视图后会默认的在里面引用layout的路径,如果没有,也可以手动添加。另外有加了一句话,用于显示页面。运行截图如下:

可以发现,页面不光输出了ViewStart页面上的div元素内容,也引用了Layout文件。
2.2.3、多个ViewStart文件的引用
如果在Views视图下面有多个ViewStart,那么他们又是怎么引用的呢?

Home下面有一个ViewStart,Views下面也有一个ViewStart。我们先在两个ViewStart中写入不同的内容,看看他们显示的问题。
Views直属文件夹下:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@{
<div>这个是Views直属下面的viewstart</div>
}
Home文件夹下:
@{
<div>这个是Home文件下面的viewstart</div>
}
运行后显示:
从上面的输出我们可以发现,先输出的是Views文件夹下面的ViewStart视图,然后才是Home文件夹下面的。由此我们可以得出结论:ViewStart视图调用的顺序是最先调用Views直属下面的,然后才是Home等Action文件夹下的。
2.2.4、ViewStart、Layout和当前视图的加载顺序
我在每一个输出的视图页面动了一点“手脚”。输出截图如下:

这个手脚就是,我在每一个页面输出了自己的文件名称还有当前的时间。
通过上面输出的时间,我们可以总结出整个视图加载的顺序:Viewstart(views下面的→Home下面的)→当前action对应的View→Layout视图
2、ASP .NETCore 2.0之视图的更多相关文章
- ASP.NETCore 3.0 Autofac替换及控制器属性注入及全局容器使用
1.Autofac基础使用 参考: https://www.cnblogs.com/li150dan/p/10071079.html 2.ASP.NETCore 3.0 Autofac 容器替换 需要 ...
- asp.netcore 3.0 Docker Nginx(震惊,原来docker是这样的!)
引言 Docker发布于2013年,Docker是dotCloud公司创始人在法国期间发起的一个公司内部项目,他是dotCloud多年云技术的一个革新.Docker在容器基础上进行了一步的封装,从网络 ...
- Asp.netCore 3.0 Web 实现Oauth2.0微信授权登陆的测试
1:Oauth2.0授权的流程截图 官方流程如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果 ...
- ASP。NET MVC (NetCore 2.0)用于处理实体框架、DbContexts和对象的通用控制器和视图
下载source - 1.5 MB 介绍 本文的源代码已更新到NetCore 2.0 ASP.净MVC项目. 当我们开始开发一个ASP.在Microsoft Visual Studio中,我们发现通过 ...
- Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML ...
- Asp.NetCore MVC Web 应用
Asp.NetCore MVC 与 普通的MVC 基本一致, 只是代码结构稍有改动 一.创建项目 1. 2. 3. 项目结构 二. 构建数据模型 1. Startup类中配置EF Core MySql ...
- ASP.NETCORE MVC模块化
ASP.NETCORE MVC模块化编程 前言 记得上一篇博客中跟大家分享的是基于ASP.NETMVC5,实际也就是基于NETFRAMEWORK平台实现的这么一个轻量级插件式框架.那么今天我主要分享的 ...
- 壹佰文章最全总结| 《关于ASP.NETCore的分享之路》
学习路线图 (关于学习ASP.NET Core需要了解和掌握的知识点图) 一言不合就来图,各位博客园小伙伴大家好,感觉好久没有写文章了,自从春节开始,中间经历种种,慢慢的就开始微信公众号发文了,原因有 ...
- Asp.NetCore之AutoMapper基础篇
应用场景 现在由于前后端技术的分离,后端程序员在使用ORM框架开发后台API接口的时候,往往会将数据库的"数据模型"直接提供给前端.而大多数时候,可能这些数据并不能够满足前端展示的 ...
随机推荐
- Python nonlocal 与 global 关键字解析
nonlocal 首先,要明确 nonlocal 关键字是定义在闭包里面的.请看以下代码: x = 0 def outer(): x = 1 def inner(): x = 2 print(&quo ...
- bps、bit、byte的区别
bps是速度单位,bit是大小单位,byte也是大小单位1bps=1bit每秒, 8bit=1byte 1 Byte = 8 bits1 KB = 1024 Bytes1 MB = 10 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 16—Recommender Systems 推荐系统
Lecture 16 Recommender Systems 推荐系统 16.1 问题形式化 Problem Formulation 在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到 ...
- notepad++正则表达式删除所有行某字符开始之前或者之后所有字符
删除S 之后的所有字符用:s.*$ 删除S 之前的所有字符用:^.*s
- javaScript字符串操作
JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...
- centos7 yum 安装 mysql
CentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql,但是CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1 ...
- Flat Shading
[Flat Shading] Per-vertex渲染技术是针对每个顶点进行渲染计算,然后把计算得到的颜色值和这个顶点关联起来.然后在多边形的面上进行颜色插值以后的平滑的渲染效果.这也叫做Gourau ...
- 【BZOJ 2120】数颜色【分块/莫队】
题意 给出n个数字和m个操作.操作有两种.1:查询区间[l,r]内不同种类得数字个数.2: 将下标为p得数字修改为v 分析 如果不是修改操作的话,用莫队贼简单就可以水过,但是因为带了修改就有一些麻烦了 ...
- 超出div宽度范围的文字进行省略号省略,在鼠标移上去以后显示完整的内容
一.前言 当我们在固定的范围内显示内容时,我们是希望能够完整显示的,然而往往事与愿违,文本会超出我们给定的范围,这时候怎么办呢? 二.超出范围,对文本进行省略号隐藏 先上图 代码很简单 div{ wi ...
- HTTP协议简析(二)
HTTP响应也包含四部分内容: 响应行: 协议版本:HTTP/1.1 状态码:200 状态描述:对状态码的说明 响应头:用来规范数据,常用的有: server:服务器信息 date:响应的时间 las ...