You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core 2.1 MVC视图中使用Razor类库?

嘿,我来帮你搞定在ASP.NET Core 2.1 MVC项目里使用Razor类库的问题。你现在的情况是Razor类库里有带@page的Razor Page,但想在MVC视图里复用它的内容,对吧?之前的示例都是针对Razor Pages项目的,那咱们换个思路来适配MVC:

第一步:确保Razor类库的配置没问题

首先检查你的Razor类库的.csproj文件,要确保它启用了MVC支持,这样MVC项目才能识别它的视图。配置应该是这样的:

<Project Sdk="Microsoft.NET.Sdk.Razor">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <!-- 这个开关是关键,让类库支持MVC视图 -->
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.0-rc1-final" />
  </ItemGroup>
</Project>

第二步:调整Razor类库的内容,拆分可复用部分

你现在的Page1.cshtml带@page,它是一个独立的Razor Page,没法直接在MVC视图里当组件用。咱们把可复用的内容拆成部分视图(Partial View):

  1. 在Razor类库的Areas/MyFeature/Views/Shared目录下新建一个Page1Partial.cshtml(路径要符合MVC的视图查找规则),内容去掉@page和Layout设置:
@model RazorClassLib1.MyFeature.Pages.Page1Model
<h1>Hello From the Razor ClassLib1</h1>
  1. 原来的Page1.cshtml可以继续保留,改成引用这个部分视图,这样它作为独立Razor Page也能正常工作:
@page
@model RazorClassLib1.MyFeature.Pages.Page1Model
@{
    Layout = "_Layout";
}
<partial name="Page1Partial" model="Model" />

第三步:在MVC视图里引用这个部分视图

现在你可以在MVC项目的任意视图里调用这个部分视图了。比如在Views/Home/Index.cshtml里:

@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
</div>

<!-- 直接引用类库中的部分视图,注意路径要写全 -->
<partial name="/Areas/MyFeature/Views/Shared/Page1Partial.cshtml" 
         model="@new RazorClassLib1.MyFeature.Pages.Page1Model()" />

(可选)简化视图引用路径

如果不想每次都写完整路径,可以在MVC项目的Startup.cs里配置视图查找规则,让MVC自动找到类库中的视图:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddRazorOptions(options =>
        {
            // 添加类库的视图位置,让MVC能找到它们
            options.ViewLocationFormats.Add("/Areas/{2}/Views/{1}/{0}.cshtml");
            options.ViewLocationFormats.Add("/Areas/{2}/Views/Shared/{0}.cshtml");
        });
}

配置完之后,就可以直接简化引用:

<partial name="Page1Partial" model="@new RazorClassLib1.MyFeature.Pages.Page1Model()" />

注意事项

  • 确保Razor类库中的Page1Model是public的,这样MVC项目才能访问它。
  • 如果你的部分视图需要业务逻辑,记得在模型里处理,或者传递合适的模型实例。

内容的提问来源于stack exchange,提问作者TimHorton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:44:06