在这篇文章中,我们将介绍Razor View Import
。除ViewStart
文件外,还有一个ViewImports
文件,MVC框架在渲染任何视图时都会查找该文件。
与ViewStart
文件一样,我们可以将ViewImports.cshtml
拖放到文件夹中,ViewImports
文件可以影响文件夹层次结构中的所有视图
此视图是此版本的MVC的新视图,在以前的MVC版本中,我们可以使用XML配置文件来配置Razor视图引擎的某些方面。
那些XML文件现在不见了,我们使用代码代替。
ViewImports
文件是我们可以编写代码并放置通用指令以引入我们的视图所需的命名空间的地方。
如果有,我们在我们的看法通常使用的命名空间,我们可以使用指令在我们出现一次ViewImports
文件中,而不是使用指令在每个视图或打字一类的完整的命名空间。
例
让我们举一个简单的例子来看看如何将using
指令移动到ViewImports
中。在Index
视图中,我们有一个using
指令来引入名称空间FirstAppDemo.Controllers
,如下面的程序所示。
@using FirstAppDemo.Controllers
@model HomePageViewModel
@{
ViewBag.Title = "Home";
}
<h1>Welcome!</h1>
<table>
@foreach (var employee in Model.Employees) {
<tr>
<td>
@Html.ActionLink(employee.Id.ToString(), "Details", new { id = employee.Id })
</td>
<td>@employee.Name</td>
</tr>
}
</table>
使用指令将允许从Razor视图生成的代码正确编译。如果不使用指令,C#
编译器将无法找到此Employee
类型。要查看员工类型,让我们从Index.cshtml
文件中删除using
指令。
@model HomePageViewModel
@{
ViewBag.Title = "Home";
}
<h1>Welcome!</h1>
<table>
@foreach (var employee in Model.Employees) {
<tr>
<td>
@Html.ActionLink(employee.Id.ToString(), "Details", new { id = employee.Id })
</td>
<td>@employee.Name</td>
</tr>
}
</table>
现在,运行该应用程序。
您将看到一个错误,指出无法找到类型或命名空间HomePageViewModel
。可能是因为您的几个视图需要相同的using
指令。因此,让我们在Views
文件夹中创建一个View
导入,而不是将其放在每个视图中。这将在每个视图中添加using
语句,只需右键单击Views
文件夹并选择Add→New Item
。
在中间窗格中,选择MVC View Imports
页面。默认情况下,名称为_ViewImports.cshtml
。就像ViewStart
一样,我们不能使用这个文件来呈现HTML,所以让我们点击Add
按钮。
现在将this
中的using
指令添加到_ViewImports.cshtml
文件中,如下所示。
@using FirstAppDemo.Controllers
现在,此文件夹或任何子文件夹中显示的所有视图都可以使用FirstAppDemo.Controllers
中的类型,而无需指定精确的using
语句。让我们再次运行您的应用程序,您可以看到该视图现在正在运行。