Kma*_*man 191 .net asp.net-mvc razor asp.net-mvc-3
这是默认MVC 3模板中的About.cshtml:
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
Put content here.
</p>
Run Code Online (Sandbox Code Playgroud)
我希望能找到对_ViewStart文件的引用About.cshtml,但显然不是.
我看着在global.asax和web.config,但我不能找出如何将About.cshtml文件"链接"从_ViewStart文件的布局.
一切都按预期工作,我只想知道引擎盖下发生了什么......
jim*_*lan 230
来自ScottGu的博客:
从ASP.NET MVC 3 Beta版本开始,您现在可以在项目的\ Views文件夹下添加一个名为_ViewStart.cshtml(或_ViewStart.vbhtml for VB)的文件:
_ViewStart文件可用于定义要在每个View渲染开始时执行的公共视图代码.例如,我们可以在_ViewStart.cshtml文件中编写代码,以编程方式将每个View的Layout属性默认设置为SiteLayout.cshtml文件:
因为此代码在每个View的开头执行,所以我们不再需要在任何单个视图文件中显式设置Layout(除非我们要覆盖上面的默认值).
重要提示:因为_ViewStart.cshtml允许我们编写代码,所以我们可以选择使布局选择逻辑比基本属性集更丰富.例如:我们可以改变我们使用的布局模板,具体取决于访问网站的设备类型 - 并为这些设备提供手机或平板电脑优化布局,以及针对PC /笔记本电脑的桌面优化布局.或者,如果我们正在构建一个跨多个客户使用的CMS系统或通用共享应用程序,我们可以根据客户(或他们的角色)在访问网站时选择不同的布局.
这样可以实现很多UI灵活性.它还允许您更轻松地编写一次视图逻辑,并避免在多个位置重复它.
也看到这个.
ris*_*ism 34
在更一般的意义上,MVC框架"知道"_Viewstart.cshtml的这种能力被称为"按惯例编码".
约定优于配置(也称为按惯例编码)是一种软件设计范例,旨在减少开发人员需要做出的决策数量,获得简单性,但不一定失去灵活性.这个短语实质上意味着开发人员只需要指定应用程序的非常规方面.例如,如果模型中有类Sale,则默认情况下数据库中的相应表称为"sales".只有当一个人偏离这个约定时,比如调用表"products_sold",才需要编写关于这些名称的代码.
维基百科
这没有什么神奇之处.它刚刚被写入MVC框架的核心代码库,因此是MVC"知道"的东西.这就是为什么你没有在.config文件或其他地方找到它; 它实际上是在MVC代码中.但是,您可以覆盖以更改或取消这些约定.
小智 22
只是另一个想法.
如果您想将自己的cshtml文件作为通用模板,可以这样做
_viewstart.cshtml你可以在你的公共cshtml文件中提到.
@{Layout = "~/Views/Shared/_Layout.cshtml";}
Run Code Online (Sandbox Code Playgroud)
Fri*_*der 12
源代码比文档更好地查找它.
从Github 引用MVC 6代码,我们有一些感兴趣的文件
---- ----更新
由于源结构的变化,现在可以在RazorViewEngine.cs中找到有关如何收集viewstart页面的信息,查找"GetViewStartPages"函数.
---- /更新----
为了回答它们如何发挥作用,请看RazorView,我相信(因为IView)与MVC管道相关联.此文件具有RenderAsync方法,该方法从MVC管道调用以呈现请求的视图.
RenderAsync调用RenderPage和THEN RenderLayout(注意ORDER).RenderPage首先调用处理viewstart文件(注意复数,可能有多个_viewstart文件).
因此,您可以从Microsoft.AspNet.Mvc.Razor命名空间下的RazorView.cs文件中的RenderViewStartAsync函数获取您寻找的信息.
这可能会立即向此问题添加一些其他信息(2016年ala MVC4,MVC5)。
Razor引擎会在_ViewStart.cshtml中找到并运行该代码,然后再在与_ViewStart.cshtml相同的目录或子目录中找到任何其他代码。
任何视图都可以覆盖Layout属性或其任何值。
只是想我可能会添加更多信息来向您展示为什么它是_ViewStart。
如果获得ILSpy并检查RazorViewEngine(System.Web.Mvc.dll)中的代码,您将看到代码本身引用了该名称。

您会看到RazorViewEngine正在查找具有以下名称的文件:
RazorViewEngine.ViewStartFileName = "_ViewStart";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121955 次 |
| 最近记录: |