布局文件类似于web form中的母版页,定义一个布局文件,然后在需要使用的视图中指定使用的布局文件,视图会把当前的动态绑定的数据传递到布局文件中,布局文件中也可以访问到这些数据。渲染视图文件中的数据在布局文件中必须使用@RenderBody()方法进行渲染,如果要使用视图文件中的数据就可以使用:@ViewBag.Title来访问视图文件中的数据。
Index.cshtml
@{
Layout = "~/Views/Shared/_SiteLayout.cshtml";//声明使用的布局页面
}
Index视图页面
<!-- 定义一个接 -->
@section Footer{
This is the default footer
}
_SiteLayout.cshtml
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
</head>
<body>
<div>
@RenderBody()
<!-- 渲染节,节在视图中定义 -->
<footer>
@RenderSection("Footer")
@if (IsSectionDefined("Footer2"))
{
<!-- 可选节点,如果视图中未定义的话也不会报错 -->
@RenderSection("Footer2", required: false)
}
else
{
<span>视图中未定义这个节点的内容,显示默认内容</span>
}
</footer>
</div>
</body>
</html>
当我们创建一个布局文件的时候Views文件夹下面会自动的创建一个_ViewStart.cshtml文件并指定了一个默认的布局文件,共享(Shared)目录会创建一个默认使用的布局文件。_ViewStart.cshtml视图会优先运行于任何同目录或者子目录下的视图,如果多个视图有用共同的设置那么我们就可以在这个文件中进行统一的设置,可以在视图中重新设置Layout的值,如果不重新设置值,那么将会使用_ViewStart.cshtml中设置的布局值。
_ViewStart.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
统一的视图
运行程序输出结果: