c# - 在我的 Controller 中使用来自其他类库的 View

标签 c# asp.net-core asp.net-core-mvc

假设我有一个名为 Controllers 的类库和另一个名为 Views 的类库

Views 中有我的 .cshtml 文件,在 Controllers 中有我的 .cs

我如何“说服”我的 Controller 使用来自名为 Views 的项目/类库中的 Views

项目结构:

|
|
|-- MyViews
        |
        |-- MyTestView.cshtml
        |-- Shared
                |
                |-- shared.cshtml
|-- Controllers
|-- AppRunner (Program Main, Startup.cs)

我试过了

// {2} is area, {1} is controller,{0} is the action    

services.Configure<RazorViewEngineOptions>(o =>
{
    o.ViewLocationFormats.Clear(); 
    o.ViewLocationFormats.Add("/MyViews/{1}/{0}" + RazorViewEngine.ViewExtension);
    o.ViewLocationFormats.Add("/MyViews/Shared/{0}" + RazorViewEngine.ViewExtension);
}

services.Configure<RazorViewEngineOptions>(o =>
{
    o.ViewLocationFormats.Clear(); 
    o.ViewLocationFormats.Add("~/MyViews/{1}/{0}" + RazorViewEngine.ViewExtension);
    o.ViewLocationFormats.Add("~/MyViews/Shared/{0}" + RazorViewEngine.ViewExtension);
}

services.Configure<RazorViewEngineOptions>(o =>
{
    o.ViewLocationFormats.Clear(); 
    o.ViewLocationFormats.Add("/../MyViews/{1}/{0}" + RazorViewEngine.ViewExtension);
    o.ViewLocationFormats.Add("/../MyViews/Shared/{0}" + RazorViewEngine.ViewExtension);
}

但它们都返回无法在这些位置找到 cshtml 文件的错误

最佳答案

主网络应用程序中的 View 将始终覆盖类库中的 View 。但是 View 肯定可以从与 Controller 不同的类库中使用。

为了发现您的 View 类库中的 View ,您的 View 类库必须使用 sdk Microsoft.NET.Sdk.Razor,并且它必须直接依赖于 Microsoft.AspNetCore.Mvc

否则它将看不到您的类库中的 View 。

并且主 Web 应用程序必须引用类库。

您不需要那个 View 位置扩展器逻辑。

更新:

您的 View 项目 csproj 应如下所示:

<Project Sdk="Microsoft.NET.Sdk.Razor">
  <PropertyGroup>
    <TargetFrameworks>netstandard2.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.3" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="path-to-yourview-models-project.csproj" />
      --maybe other project refs here
  </ItemGroup>
</Project>

请注意 Microsoft.NET.Sdk.Razor 不是包依赖项。

此外,您的类库中的 View 需要与主 Web 应用程序中相同的文件夹结构约定。

 Views
   Home
      .cshtml files
   Shared
      .cshtml files
   _ViewImports.cshtml

可以放在 Controller 名称对应的不带“Controller”后缀的文件夹中,也可以全部放在shared中

关于c# - 在我的 Controller 中使用来自其他类库的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54554100/

相关文章:

c# - 文件或目录已损坏且无法读取

c# - 从列表框中删除未知值

c# - 直接显卡访问

c# - 在 ASP.NET Core 中访问当前的 HttpContext

c# - 如何在 asp.net core 中更改根路径 ~/in Razor

asp.net-core - 如何使用 Autofac 和 ASP.NET Core 在 Controller 上启用属性注入(inject)?

c# - MVC Core IActionResult 含义

c# - 什么是 UMThunkStubAMD64?为什么它看起来是一个瓶颈?

asp.net-core - expires_in 或 expires_at 用于 OpenId 连接中的访问 token ?

asp.net-core - 根据 url 授权登录用户