Cs代码写在html页面哪里,.net - _ViewStart.cshtml布局文件在哪里以及如何链接?

.net - _ViewStart.cshtml布局文件在哪里以及如何链接?

这是默认MVC 3模板中的About.cshtml:

@{

ViewBag.Title = "About Us";

}

About

Put content here.

我希望在About.cshtml中可以找到对_ViewStart文件的引用,但显然不是。

我查看了global.asax和web.config,但我无法找到About.cshtml文件如何与_ViewStart文件的布局“链接”。

一切都按预期工作,我只想知道引擎盖下发生了什么......

7个解决方案

214 votes

来自ScottGu的博客:

从ASP.NET MVC 3 Beta版开始,您现在可以添加文件   在下面调用_ViewStart.cshtml(或VB的_ViewStart.vbhtml)   \ Views项目的文件夹:

_ViewStart文件可用于定义您的常用视图代码   想要在每个View的渲染开始时执行。 例如,   我们可以在_ViewStart.cshtml文件中编写代码   以编程方式将每个View的Layout属性设置为   默认情况下SiteLayout.cshtml文件:

因为此代码在每个View的开头执行,所以我们不再   需要在任何单个视图文件中显式设置布局   (除非我们想覆盖上面的默认值)。

重要提示:因为_ViewStart.cshtml允许我们编写代码,所以我们   可以选择使我们的布局选择逻辑比仅仅更丰富   基本属性集。 例如:我们可以改变布局模板   我们根据访问网站的设备类型使用 -    并为这些设备提供手机或平板电脑优化布局,以及   针对PC /笔记本电脑的桌面优化布局。 或者如果我们正在构建一个   跨多个客户使用的CMS系统或通用共享应用程序   我们可以根据客户选择不同的布局(或者   他们的角色)访问网站时。

这样可以实现很多UI灵活性。 它还允许您更多   轻松编写一次视图逻辑,避免重复多次  地方。

也看到这个。

jim tollan answered 2019-03-21T18:56:55Z

30 votes

在更一般的意义上,MVC框架“知道”_Viewstart.cshtml的这种能力被称为“按惯例编码”。

约定优于配置(也称为按惯例编码)   寻求减少数量的软件设计范例   开发人员需要做出的决定,获得简单,但不是   必然失去灵活性。 这句话基本上意味着一个   开发人员只需要指定非常规方面   应用。 例如,如果模型中有类Sale,则   默认情况下,数据库中的相应表称为“sales”。 它   只有当一个人偏离这个惯例时,例如调用   表“products_sold”,需要编写有关这些的代码  名。

维基百科

这没有什么神奇之处。 它刚刚被写入MVC框架的核心代码库,因此是MVC“知道”的东西。 这就是为什么你没有在.config文件或其他地方找到它; 它实际上是在MVC代码中。 但是,您可以覆盖以更改或取消这些约定。

rism answered 2019-03-21T18:57:38Z

20 votes

只是另一个想法。

如果您想将自己的_viewstart.cshtml文件作为通用模板,可以这样做

在您的_viewstart.cshtml中,您可以提及您的常见cshtml文件。

@{Layout = "~/Views/Shared/_Layout.cshtml";}

user2515392 answered 2019-03-21T18:58:16Z

11 votes

源代码比文档更好地查找它。

从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函数获取您寻找的信息。

Frison Alexander answered 2019-03-21T18:59:33Z

4 votes

这可能会为此问题添加一些附加信息(2016 ala MVC4,MVC5)。

Razor引擎在_ViewStart.cshtml中找到并运行代码,然后在找到_ViewStart.cshtml的同一目录或子目录中的任何其他代码之前。

任何视图都可以覆盖Layout属性或其任何值。

raddevus answered 2019-03-21T19:00:13Z

1 votes

如果你想为你的页面建立一个共同的布局,你需要定义公共布局,并将视图与布局相关联,我们必须在每个视图上设置布局属性,这违反了DRY(不要重复自己)的原则。为此,.Net Framework提供了“_ViewStart.cshtml”文件,放在视图文件夹中。我们将布局信息放在“_ViewStart.cshtml”文件中,默认情况下每个视图都使用此布局信息。如果您想提供一些不同的布局信息,让我们假设您的主页视图,您可以参考该布局创建一个新的“_ViewStart.cshtml”并将其放在“Home View”文件夹中。

KamalDeep answered 2019-03-21T19:00:39Z

-1 votes

我也有同样的问题,后来注意到管道中缺少app.UseStaticFiles();。

添加到管道后它正在工作。

gopalakrishnan ramasamy answered 2019-03-21T19:01:12Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值