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
被我们一点一点的拆的七七八八了,每个文件单独承担一部分指责,也就是单一职责。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 布局视图 上一章节中我们学习了如何使用 EF 框架从数据库中读取并显示数据,我们使用了两个模板文件 Index.cshtml 和 Detail.cshtml 。相信大家在创建填充 Detail.cshtml 内容的时候会想,为什么 <!DOCTYPE html> 这样重复的内容我们要输入一次又一次,有没有办法只输入一次呢? 答案是肯定的,有的。 Razor 视图引擎提供了 Layout 布局的功能,可以把视图中公共的部分抽出来单独为一个文件,这样就省去了不少的麻烦 本章节,我们就来学习下 Razor 布局视图。大多数网站和 Web 应用程序都会创建具有一些通用元素的页面 通常每个页面顶部都有一个区域用于显示公共的 logo 和导航菜单 页面的左边侧栏都会添加一些其它的链接和信息,且页面底部都会显示版权信息和一些公司信息 几乎应用程序的每个页面都可能包含这些公共元素。在 ASP.NET Core 中,我们可以使用布局视图来...
- 下一篇
ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了如何使用视图导入把一些公共的 C# 指令抽出来放到一起。这已经大大方便了我们编写控制器视图了,到此为止,我们真的没办法再精简控制器视图了。 但是,我总觉的 Index.cshtml 怪怪得,一时又想不起来哪里奇怪 算了,先喝杯茶再说.. .... .... 真的啊,我刚刚真的去喝了瓶牛奶,然后,看了一部电影,结果,天黑了...有吃了顿饭... 我终于想起来了,原来是看 <a> 标签不顺眼,我们再来看看 Index.cshtml 中的代码 @model HomePageViewModel @{ ViewBag.Title = "Home 控制器下的 Index 方法"; } <h1>欢迎!</h1> <div>这个消息来自 Home 控制器下的 Index 的视图文件 index.cshtml </div> <table>...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G