如何将 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 项目的视图分离到另一个项目的步骤。希望这篇文章能对你有所帮助!

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

相关推荐
*长铗归来*1 天前
ASP.NET Core Web API 中控制器操作的返回类型及Swagger
后端·c#·asp.net·.netcore
靓仔建1 天前
Asp.net core用Swashbuckle.AspNetCore库出现错误信息:No operations defined in spec!
后端·asp.net·swagger
敲敲敲-敲代码7 天前
web系统(asp.net和C#)
前端·c#·asp.net
老葱头蒸鸡8 天前
(28)ASP.NET Core8.0 SOLID原则
后端·asp.net
王家视频教程图书馆8 天前
C# asp.net模板代码简单API请求
开发语言·c#·asp.net
SEO-狼术9 天前
Telerik UI for ASP.NET MVC 2025 Q3
ui·asp.net·mvc
速易达网络9 天前
.NET MVC中实现后台商品列表功能
asp.net·mvc
老葱头蒸鸡12 天前
(23)ASP.NET Core2.2 EF关系数据库建模
后端·asp.net
老葱头蒸鸡12 天前
(14)ASP.NET Core2.2 中的日志记录
后端·asp.net
准时准点睡觉13 天前
HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容——错误代码:0x00000000
运维·服务器·iis·asp.net