ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程
ASP.NET Core Razor 视图起始页
上一章节中我们介绍了布局视图,和使用布局视图改造了我们的 Index.html
页面,这已经非常节省我们的精力了,也大大提高了心情的愉悦程度。好是好了,可能能不能一省到底,把那个 @{ Layout }
也变的只写一次就好了呢?
对吧,这样就可以很轻松的了,答案同样是肯定的,可以。
我们可以使用启动视图来完成这个工作,视图起始页,顾名思义,就是 Razor 视图引擎每次渲染视图前,就会先加载的视图
本章节,我们将学习 Razor 视图起始页 ( View Start )。
视图起始页 _ViewStart.cshtml
MVC 中的 Razor 视图引擎有一个约定,就是在渲染单个控制器视图前,会优先查找名称为 _ViewStart.cshtml
的文件,并执行该文件中的代码
于是,Razor 视图引擎的渲染流程就变成了下图这样
当然了,_ViewStart.cshtml
也不是万能的,就是它不能包含任何 HTML 标记,但可用于从各个视图内的代码块中删除重复的代码
这也是遵守单一职责原则,输出 HTML 代码的工作都交给了布局视图和普通视图去搞定
在我们的 HelloWorld
项目中,我们希望每个视图都使用上一章节我们创建的布局视图 _Layout.html
,而不是每个视图中都要手动加载它,像这种情况,我们就可以使用启动视图来解决
范例
我们举一个简单的例子来描述下启动视图时如何工作的
我们将在 Views
目录下新建一个启动视图 _ViewStart.cshtml
,然后输入加载布局视图的公共代码
右键点击
View
目录,选择 添加 -> 新建文件 打开新建文件对话框如果你的电脑是
Windows
系统,则是选择 添加 -> 新建项选中左边的 ASP.NET Core,然后从中间选中 MVC 视图起始页
如果你的电脑是
Windows
系统,则是先选中 ASP.NET Core -> Web -> ASP.NET ,然后从中间选择 Razor View Start在名称中输入
_ViewStart
或_ViewStart.cshtml
( Windows ),然后点击右下角的 新建 或 添加 ( Windows )
创建完成后的目录结果如下
_ViewStart.cshtml
中默认的内容如下
@{
Layout = "_Layout";
}
我们先删除 Index.html
中的 Layout
,删除完成后,Index.cshtml
中的内容如下
@model HelloWorld.Controllers.HomePageViewModel
@{
ViewBag.Title = "Home 控制器下的 Index 方法";
}
<h1>欢迎!</h1>
<div>这个消息来自 Home 控制器下的 Index 的视图文件 index.cshtml </div>
<table>
@foreach (var employee in Model.Employees)
{
<tr>
<td><a href="/Home/Detail/@employee.ID">@employee.ID</a></td>
<td>@employee.Name</td>
</tr>
}
</table>
刷新浏览器,可以看到输出结果如下
为了演示 _ViewStart.cshtml
的作用,我们清空 _ViewStart.cshtml
中的内容,改成如下
刷新浏览器,可以看到输出结果如下
哈哈,_ViewStart.cshtml
起作用了
我们先把 _ViewStart.cshtml
的内容恢复成默认的。
_ViewStart.cshtml 的运行机制
当 MVC 框架中的 Razor 开始渲染视图前,它会递归检查文件夹结构层次中是否存在
ViewStart
文件我们已将
_ViewStart
直接放入了Views
文件夹中。这将影响Views
文件夹内的所有文件夹中的所有视图以及Home
文件夹内的视图以及Shared
文件夹以及将来可能添加的其它任何控制器文件夹如果我们使用
ViewStart
并将其 仅 放置在Home
文件夹中,那么只有在Home
文件夹中的视图被渲染时才会执行这一小段代码我们甚至可以拥有多个
ViewStart
文件,因此我们可以在Views
文件夹中的ViewStart.cshtml
中设置所有视图的布局视图如果我们想要改变
Home
文件夹中所有视图的默认设置,可以在Home
文件夹中设置另一个ViewStart
,将布局设置为其它内容
区别
那么下面两个内容有区别吗?
Layout = "_Layout";
和
Layout = "~/Views/Shared/_Layout.cshtml";
答案是有,当然如果只有一个 _Layout.cshtml
的情况下,就没有区别
- 前者的搜索范围比后者更广,可以在
Views
目录也可以在Views/Shared
目录 - 前者的文件扩展名可以随意,但后者只能是
.cshtml
最新文章
- jquery给height拼接动态变量
- C++学习48 对ASCII文件的读写操作
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- ParamQueryGrid行、列合并(Ⅸ)
- MongoDB Error
- 开源Math.NET基础数学类库使用(07)一些常用的数学物理常数
- 关于struts2的web.xml配置
- WAF指纹探测及识别技术
- sed,n,N,d,D,p,P,h,H,g,G,x,解析
- 如何优雅地查看 JS 错误堆栈?
- go 语言图片像素点处理
- MySQL多实例部署与优化
- 20155232《网络对抗》Exp 6 信息搜集与漏洞扫描
- 20155303 2016-2017-2 《Java程序设计》课程总结
- Python中*args和**kwargs的区别
- java并发编程:线程安全管理类--原子操作类--AtomicMarkableReference<;V>;
- java 装饰者模式
- java调用ruby代码
- [agc006F]Blackout
- 20181016-4 Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 05
- sublime2常用插件
热门文章
- diff_mysql_table_exec.py
- 钢琴 - steinway
- [AngularFire2] Build a Custom Node Backend Using Firebase Queue
- 从0開始学习 GitHub 系列之「07.GitHub 常见的几种操作」
- 远程登录DSM,显示“您没有权限使用本项服务?
- 小强的HTML5移动开发之路(47)——jquery mobile基本的页面框架
- 《iOS Human Interface Guidelines》——Segmented Control
- 【社交分享SDK】ShareSDK for Android 2.5.9已经公布
- 阿里云Java镜像:基本配置和总体说明
- 剑指Offer面试题10(Java版):二进制中的1的个数