当我在Visual Studio中创建一个新的ASP.NET 4.5 Web应用程序MVC时,它从一个介绍模板开始。
相关部分是:
查看/主页/ About.cshtml
@{
ViewBag.Title = "About";
}
<h2>@ViewBag.Title.</h2>
...
查看/共享/ _Layout.cshtml
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title - My ASP.NET Application</title>
...
@RenderBody()
...
查看/ _ViewStart.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
如果我理解正确,并假设在浏览器中打开了“关于”页面:
首先调用 _ViewStart.cshtml ,它表示要调用 _Layout.cshtml 布局。
它会呈现 _Layout.cshtml ,直到达到 @RenderBody()的调用,此时他将呈现 About.cshtml 即可。当结束时,他将呈现 _Layout.cshtml 的其余部分。
但我怀疑,如果 _Layout.cshtml 首先启动,它如何在<title>
变量@ViewBag.Title
上打印,该变量仅在 About.cshtml
答案 0 :(得分:3)
点击网址时,控制器上会调用操作。视图是这样的结果,所以你不直接调用视图(我的猜测是你来自webforms背景,你调用aspx页面,MVC使用不依赖于物理文件的不同模型)。然后,操作指定要渲染的视图(并将模型传递给它)。然后,此视图指定渲染视图时要使用的布局。
因此,与您习惯的相比,控制机制被颠倒了。
URL(通过路由)指定控制器和操作 - &gt;动作说让我使用这个视图 - &gt;然后视图说使用此布局渲染我。所以层次结构是:
所以回答你的具体问题:
但是我怀疑,如果_Layout.cshtml首先启动,它是怎么回事 在
<title>
打印已分配的变量@ViewBag.Title
只在About.cshtml?
首先不调用布局,视图指定应该用于渲染自身的布局。
答案 1 :(得分:-1)
没有。视图在布局之前呈现。