ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程
ASP.NET Core Razor 视图导入
上一章节我们介绍了视图起始页,学习了如何使用视图起始页把一些公共的 C# 表达式抽出来放到一起。这已经大大方便了我们编写控制器视图了,到此为止,可能,我们都已经觉得没办法再精简控制器视图了。
事实是这样的么?
我们来看看我们的 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>
我们为了引入 HomePageViewModel ,竟然是用来全限定类名 HelloWorld.Controllers.HomePageViewModel
一种最简单的做法就是先引入 HelloWorld.Controllers 再使用 HomePageViewModel。 我们可以使用 Razor 提供了 @using 指令来引入命名空间
@using HelloWorld.Controllers
修改下我们的 Index.cshtml 为如下内容
@using HelloWorld.Controllers
@model 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>
刷新浏览器,可以看到输出结果如下

这样做的好处就是,如果要引入一个命名空间下的多个类,就不要全部都使用全限定类名了
当然了,到这里我们又有一个大胆的想法,就是能否将 @using 指令独立出来放到别的文件中,哈哈..偷懒起来连自己都快不认识了
也就是说,我们可否能够只引用 HomePageViewModel,而在别的地方导入命名空间呢 HelloWorld.Controllers
答案也是肯定的,显而易见的。
按照我们之前所学的东西,我们可以把这些引入命名空间的事情放到视图起始页 _ViewStart.cshtml 中去对吧,试一试吧
我们先修改 Index.cshtml 去掉 @using 语句
@model 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 中添加 @using 语句
@using HelloWorld.Controllers
@{
Layout = "_Layout";
}
重启应用程序,然后刷新浏览器,哎哟,出错了

想法是非常好的,但现实太残酷,提示 HomePageViewModel 不存在,但我们不是命名已经引入了 HelloWorld.Controllers 命名空间吗?
为什们?
这是因为 _ViewStart.cshtml 中的命名空间不会顺沿到 Index.cshtml,也就是说,它们两个是独立的渲染的
难道没有办法了吗?
饿,有的,别灰心
Razor 还提供了视图导入,使用视图导入能解决这个问题
视图导入 ( View Import )
本章节我们将学习 Razor 中的视图导入,视图导入是除了视图起始页之外,另外一种 Razor 在渲染任何其它视图前会查找的视图
视图导入的文件名为 _ViewImports.cshtml
跟视图起始页一样,我们可以把视图导入 _ViewImports.cshtml 放到一个文件夹中,那么视图导入中的代码则会影响当前文件夹和所有的递归子文件夹中的视图

在视图导入文件中 _ViewImports.cshtml,我们可以编写一些 C# 代码,和放置常规的指令来引入视图所需要的命名空间
如果某个文件夹下的大部分视图都会使用到某个命名空间,那么我们可以在视图导入中使用一次 @using 导入即可,而不是在每个视图中使用 @using 指令分别导入或者输入全限定类名
范例
让我们举一个简单的例子来看看如何将我们的 @using 指令移动到 _ViewImport.cshtml 中
我们将在 Views 目录下新建一个视图导入 _ViewImports.cshtml,然后输入公共的 @using 指令
右键点击
View目录,选择 添加 -> 新建文件 打开新建文件对话框如果你的电脑是
Windows系统,则是选择 添加 -> 新建项
选中左边的 ASP.NET Core,然后从中间选中 MVC 视图导入页
如果你的电脑是
Windows系统,则是先选中 ASP.NET Core -> Web -> ASP.NET ,然后从中间选择 Razor 视图导入
在名称中输入
_ViewImports或_ViewImports.cshtml( Windows ),然后点击右下角的 新建 或 添加 ( Windows )
创建完成后的目录结果如下

_ViewStart.cshtml 中默认的内容如下

@namespace HelloWorld.Views
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
我们先删除 _ViewStart.html 中的 @using,删除完成后内容如下
@{
Layout = "_Layout";
}
然后在 _ViewImports.cshtml 中加入 @using 指令,添加完成后内容如下
@namespace HelloWorld.Views
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@using HelloWorld.Controllers
重新启动应用程序,然后刷新浏览器,可以看到输出结果如下

是不是很有趣,Index.cshtml 被我们一点一点的拆的七七八八了,每个文件单独承担一部分指责,也就是单一职责。
ASP.NET Core Razor 视图导入 - 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 MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html
Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html 1.前言 上一篇文章我开源了轮子,Asp.net Core 3.1 Razor视图模版动态渲染PDF,然后,很 ...
- ASP.NET Core Razor 视图组件
视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响 ...
- Razor 视图引擎 – ASP.NET MVC 4 系列
Razor 视图引擎是 ASP.NET MVC 3 开始扩展的内容,并且也是默认视图引擎. Razor 通过理解标记的结构来实现代码和标记之间尽可能顺畅的转换.下面的例子演 ...
- ASP.NET MVC Razor视图引擎攻略
--引子 看下面一段MVC 2.0的代码. <%if (Model != null){%> <p><%=Model%></p><%}%>&l ...
- ASP.NET Mvc Razor视图语法
在ASP.NET MVC中有两套模版引擎,一套是ASPX,一套是Razor,从事过WebForms开发的朋友们,对于ASPX模版已经很熟悉了,下面我说一下我所熟悉的Razor模版引擎的一些语法,供大家 ...
- ASP.NET MVC3 Razor视图引擎-基础语法
I:ASP.NET MVC3在Visual Studio 2010中的变化 在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化. 1.ASP.NET MVC3必要的运行环境 ...
- MvcMailer通过ASP.NET MVC Razor视图和基架发送邮件
MvcMailer是一个有趣的组件,您可以使用ASP.NET MVC框架在发送邮件.很重要的是,它使用Razor视图引擎的观点作为电子邮件模板和很容易安装和使用.在本文中你将看到如何安装,设置邮件模板 ...
随机推荐
- MFC注册窗口类以及FindWindow按窗口类名查询(避免用#32770获取窗口句柄)
呵呵,最近在研究SendMessage函数,其中需要用到m_hWnd,之后延伸着又尝试获得窗口的句柄,于是遇到了FindWindow函数,原型如下: HWND FindWindow ( LPCSTR ...
- 解密Arm中国:全球最具影响力的芯片公司中国布局浮出水面
经济观察报 记者 陈伊凡 沈怡然 李华清 对于Arm与中国合资公司事宜,5月4日下午,Arm授权的代表邮件回复<经济观察报>称:“合资公司目前刚开始运营”,“我们的重点是让这个新的合资公司 ...
- UE4 Editor快捷键(ShortCut Key)
转载请注明出处,所有权利保留. Unreal Engine4的快捷键现在无官方文档,因为他们工作比较忙啊. 记录时间:2014-10-15 现在自己整理一个,仅供参考. 因为他们的team成员说的还有 ...
- DC综合:划分与编码风格
划分与编码风格 合理的设计划分和好的HDL编码风格对成功的综合影响很大. 逻辑划分是成功综合(和布局布线,如果布图是层次化的)的关键. 综合划分 "分而治之" 把复杂的设计化简为更 ...
- QAtomicInt支持四种类型的操作,Relaxed、Acquired、Release、Ordered
Memory Ordering Background 很久很久很久以前,CPU忠厚老实,一条一条指令的执行我们给它的程序,规规矩矩的进行计算和内存的存取. 很久很久以前, CPU学会了Out-Of ...
- [JS Compose] 6. Semigroup examples
Let's we want to combine two account accidently have the same name. , friends: ['Franklin'] } , frie ...
- [GraphQL] Use GraphQLList with GraphQLObject Types
When working with collections of things in GraphQL, we'll always reach out for the GraphQLListType. ...
- 贝勒爷教你怎样在Mac上安装Microsoft Office
1.亲,鼠标双击该安装文件: 2.非常好,你将会看到这样一个东东(假设没有看到那就不要来见我了): 3.不错,再次双击红色区域,假设出现下面提示,别怕哈: 4.点击"好"butto ...
- php中如何获取数组长度
php获取数组的长度的方法 一.总结 一句话总结:count方法和sizeof方法 二.php获取数组的长度的方法 php获取数组长度的方法: 一). 获取一维数组的方法: 1.count.sizeo ...
- PHP移动互联网开发笔记(8)——MySQL数据库基础回顾[2]
一.数据表 为了确保数据的完整性和一致性,在创建表时指定字段名称,字段类型和字段属性外,还需要使用约束(constraint),索引(index),主键(primary key)和外键(foregin ...