【发布时间】:2019-05-04 00:41:31
【问题描述】:
在 ASP.NET Core MVC 中,我们可以将确切名称为 _ViewStart.cshtml 的文件放入文件夹中,以包含要在该文件夹中的每个剃须刀视图/页面之前运行的通用 C# 代码。像这样的:
@{
const string SomeConstant = "some value";
}
类似地,文件夹中的确切名称为 _ViewImports.cshtml 的文件可以包含所有常见的 razor 指令,以便在该文件夹中的 razor 视图/页面之间共享。像这样:
@layout _Layout
@using MyApp.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
但有一个问题我无法通过谷歌搜索,无论我如何改写它:
有人可以向我解释为什么我们同时使用_ViewStart.cshtml 和_ViewImports.cshtml 来定义通用代码和指令吗?为什么这些功能(它们似乎并不相互冲突)不在一个单个文件中定义?
【问题讨论】:
-
因为一个叫做关注点分离的原则。 ViewImports 关心导入,ViewStart 关心页面/视图所需的逻辑
-
但是其余的视图关心指令和逻辑和标记......
-
仅当您愿意时。您可以在一个文件中完成所有操作,包括布局。你做什么只取决于你
-
“只有你想”?抱歉,您的 cmets 似乎比有效的论点包含更多的屈尊俯就……请启发我:我如何在我的其他 .cshtml 文件中坚持这种“称为关注点分离的原则”(您显然只是在教育我) ?您最后一次看到一个不包含指令+标记+一些 c# 全部在一个文件中的实际剃须刀页面是什么时候?这不正是将“剃须刀页面”引入 MVC 堆栈的原因吗? 很抱歉引起愤怒的反弹......
-
Razor Pages 是引起 PHP 用户兴趣的又一次失败尝试,至少微软说,我不会碰它。我有应用程序,其中视图仅用于加载 HTML 和 javascript,其他仅加载 Angular,以及其他包含 HTML 和 Razor。
标签: c# razor asp.net-core asp.net-core-mvc