.net core 2.1 在各种项目中重用_Layout
Posted
技术标签:
【中文标题】.net core 2.1 在各种项目中重用_Layout【英文标题】:.net core 2.1 reusing _Layout throughout various projects 【发布时间】:2019-04-13 08:59:15 【问题描述】:我正在尝试在多个 .net core 2.1 Razor Page 项目中重复使用相同的 _Layout.cshtml 文件。目前我有一个 Razor 页面类库(Common shared project),它是 _Layout.cshtml 文件所在的位置。除了布局文件之外,还有 css 和 js 文件,所有其他项目也应该可以访问(我能够做到这一点)。
辅助项目将引用 Common 共享项目,并且应该能够利用其中的 _Layout.cshtml 文件。
我的问题是,当我从这些项目访问页面时,当前它没有加载常见的 _layout 文件,而是加载了自己的布局文件。如果我尝试删除此文件,则会引发找不到布局文件的错误。但是,如果我加载包含在 Common shared project 中的页面,它会加载自己的 _layout。
我已经使用以下教程来了解我现在的位置,但我不知道如何使辅助项目加载 公共共享项目中的布局。
Including Static Resources In Razor Class Libraries In ASP.NET Core
Can Razor Class Library pack static files (js, css etc) too
Reuse UI With Razor Class Libraries (RCL) In ASP.NET Core
请记住,其中 2 篇文章基于共享 css 和 js 文件(确实有效),但我也阅读了有关布局的其他示例并且没有运气(目前我没有有其他文章的链接)
就我编写的代码而言,我目前正在试验一个示例项目,它与第一篇文章相同(在 ASP.NET Core 中的 Razor 类库中包含静态资源)。
更新
利用第三个链接(在 ASP.NET Core 中使用 Razor 类库 (RCL) 重用 UI)我能够实现我的目标。但是,我以前使用过相同的策略,但它不起作用。我将尝试更多地解决这个问题。如果我有任何其他更新,我会发布它们。
【问题讨论】:
【参考方案1】:显然,由于我使用的是Including Static Resources In Razor Class Libraries In ASP.NET Core 链接,因此该示例保留了包含 Area/MyFeatures 文件夹的默认剃须刀页面类库结构。我将其修改为像最后一个链接 Reuse UI With Razor Class Libraries (RCL) In ASP.NET Core 一样工作,其中 Common shared project 的结构与 Web 应用程序项目的结构相同(没有 Area 或 MyFeatures 文件夹)。我还补充说:
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers
到我位于Common shared project中的_ViewStart.cshtml结尾。
还需要注意的是,您必须从 Web 应用程序中删除 _layout.cshtml 和 _viewstart.cshtml,否则它将覆盖共享的项目布局。
无论如何,这似乎已经解决了问题,并且现在可以正常工作了。
【讨论】:
您是否在任何地方找到有关网站覆盖 _viewimports 和 _viewstart 的共享项目文件的官方文档? @Terry 嗨,这是很久以前的事了,所以我没有任何旧的参考资料,但我快速搜索了你。这是一个链接(请参阅在每个视图之前运行代码部分):docs.microsoft.com/en-us/aspnet/core/mvc/views/… 虽然我提供的链接没有明确讨论这种情况,但它确实提到它们以分层方式加载。如果我没记错的话,这就是它具有这种行为的原因(在尝试从引用的项目加载之前从主应用程序加载)。 另请注意,此链接来自 .net core 5.0,但我不认为这些版本之间的这种分层加载结构发生了变化......它还谈到了其中一个文件,但我很确定它对所有这些都应用相同的规则。 除非我读错了,也就是说它应该按我的意愿工作?我读它就好像它要运行层次结构中的每个匹配文件。仅对第一场比赛。我的问题在这里:***.com/questions/65557690/… 但是阅读您发送的那些文档,我看到“@using:所有内容都包括在内;重复项被忽略”来自本节docs.microsoft.com/en-us/aspnet/core/mvc/views/… @Terry 您实际上可以将 _viewimports.cshtml 留在您的站点项目中。我会在我的回答中纠正这一点。我必须删除的文件只有 _layout.cshtml 和 _viewstart.cshtml。因此,您应该能够在您的站点上导入,然后它将回退到共享项目 _viewimport.cshtml 文件以加载其余指令。网站上的声明“@using:全部包含;重复项被忽略”只是说它将从站点和共享项目级别加载所有使用,但如果您在两个项目上都有 2 个类似的 using 语句,则共享的将被忽略.以上是关于.net core 2.1 在各种项目中重用_Layout的主要内容,如果未能解决你的问题,请参考以下文章
“前.NET Core时代”如何实现跨平台代码重用 ——程序集重用
第二十九节: Asp.Net Core零散总结(各种目录内外网ip)[不断补充]
无法将 http 请求发布到 .Net Core 2.1 Web 项目
如何在 asp.net core 2.1 中使用自定义消息设置状态代码?