如何将 ASP.NET Core MVC 项目的视图分离到另一个项目

如何将 ASP.NET Core MVC 项目的视图分离到另一个项目

在当下这个年代 SPA 已是主流,人们早已忘记了 MVC 以及 Razor 的故事。但是在某些场景下 SSR 还是有意想不到效果。比如某些静态页面,比如追求首屏加载速度的时候。最近在项目中回归传统效果还是不错。

有的时候我们希望将视图(Views)从主项目中分离出来,以提高项目的模块化程度。本文将介绍如何将视图分离到另一个 Razor 类库项目中。这在以前 .NET Framework 下是很常见的,但是 Core 下面的资料太少了,记录一下。

步骤 1:创建 Razor 类库项目

首先,我们需要创建一个新的 Razor 类库项目。在项目文件(.csproj)中,我们需要添加以下配置:

复制代码
<Project Sdk="Microsoft.NET.Sdk.Razor">

	<PropertyGroup>
	 ...
		<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
		<PreserveCompilationContext>false</PreserveCompilationContext>
		<SuppressDependenciesWhenPacking>false</SuppressDependenciesWhenPacking>
		<PackageId>XXX</PackageId>
	</PropertyGroup>

	<ItemGroup>
		<FrameworkReference Include="Microsoft.AspNetCore.App" />
	</ItemGroup>

</Project>

步骤 2:复制视图到新项目

然后,我们需要将所有的视图文件从主项目复制到新的 Razor 类库项目中。

步骤 3:主项目引用新项目

接下来,我们需要在主项目中添加对新 Razor 类库项目的引用。这可以通过在主项目的项目文件中添加以下代码来实现:

复制代码
<ItemGroup>
	<ProjectReference Include="path/to/your/razor/project.csproj" />
</ItemGroup>

步骤 4:添加视图的扫描路径

在主项目中,我们需要配置 Razor 视图引擎的视图位置格式,以便它能找到新项目中的视图。这可以通过以下代码来实现:

复制代码
builder.Services.Configure<RazorViewEngineOptions>(options =>
{
    options.ViewLocationFormats.Add("/Widgets/{1}/{0}" + RazorViewEngine.ViewExtension);
    options.ViewLocationFormats.Add("/Widgets/Shared/{0}" + RazorViewEngine.ViewExtension);
});

步骤 5:调整静态资源的路径

最后,如果新项目中包含了静态资源(如 CSS、JavaScript、图片等),并且这些资源放在 wwwroot 文件夹下,那么这些资源会在编译后出现在主项目的 wwwroot/_content/{library project name} 文件夹下。因此,我们需要在 HTML 中使用以下的路径格式来引用这些静态资源:

复制代码
<link href="~/_content/{library project name}/css/site.css" rel="stylesheet" />
<script src="~/_content/{library project name}/js/site.js"></script>

以上就是将 ASP.NET Core MVC 项目的视图分离到另一个项目的步骤。希望这篇文章能对你有所帮助!

关注我的公众号一起玩转技术

相关推荐
Lost of 程序猿20 小时前
建造者模式实战:告别“十参数构造函数“的数据导出任务
后端·设计模式·c#·asp.net
Lost of 程序猿1 天前
命令模式实战:把“下单后的动作“打包成可执行的任务
后端·设计模式·c#·asp.net·命令模式
kybs19918 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
Lost of 程序猿10 天前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
Lost of 程序猿10 天前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
Lost of 程序猿13 天前
.NET 10 船端单机部署与离线升级实战:从闪退事故到无感回滚
c#·asp.net·.net
Lost of 程序猿16 天前
M2 实战:询价与采购订单聚合落地——跨聚合一致性、领域事件与 Outbox
开发语言·c#·asp.net·.net
Lost of 程序猿17 天前
船岸数据同步链路实战:SendFlag、单调版本号与断网三天后的续传
后端·c#·asp.net
周杰伦fans21 天前
ASP.NET Core Identity 从入门到实战:常见问题与解决方案
后端·asp.net
Lost of 程序猿23 天前
ASP.NET Core API 版本管理与契约演进:船岸版本碎片化下的兼容性工程
后端·asp.net