C# 在我的控制器中使用来自其他类库的视图
假设我有一个名为C# 在我的控制器中使用来自其他类库的视图,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,假设我有一个名为Controllers的类库和另一个名为Views 在视图中有我的.cshtml文件,在控制器中有我的.cs 如何“说服”我的控制器使用名为视图的项目/类库中的视图 项目结构: | | |-- MyViews | |-- MyTestView.cshtml |-- Shared | |-- shared.cshtml |-- Controllers |-- AppRun
Controllers
的类库和另一个名为Views
在视图中
有我的.cshtml
文件,在控制器中有我的.cs
如何“说服”我的控制器使用名为视图
的项目/类库中的视图
项目结构:
|
|
|-- 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);
}
/{2}是区域,{1}是控制器,{0}是动作
服务配置(o=>
{
o、 ViewLocationFormats.Clear();
o、 添加(“/MyViews/{1}/{0}”+RazorViewEngine.ViewExtension);
o、 添加(“/MyViews/Shared/{0}”+RazorViewEngine.ViewExtension);
}
或
services.Configure(o=>
{
o、 ViewLocationFormats.Clear();
o、 添加(“~/MyViews/{1}/{0}”+RazorViewEngine.ViewExtension);
o、 添加(“~/MyViews/Shared/{0}”+RazorViewEngine.ViewExtension);
}
或
services.Configure(o=>
{
o、 ViewLocationFormats.Clear();
o、 添加(“/../MyViews/{1}/{0}”+RazorViewEngine.ViewExtension);
o、 添加(“/../MyViews/Shared/{0}”+RazorViewEngine.ViewExtension);
}
但是它们都返回一个错误,即在这些位置找不到cshtml文件。主web应用程序中的视图将始终覆盖类库中的视图。但是视图肯定可以从不同于控制器的类库中使用 为了发现视图类库中的视图,视图类库必须使用sdk Microsoft.NET.sdk.Razor,并且它必须直接依赖于Microsoft.AspNetCore.Mvc 否则,它将看不到类库中的视图 主web应用程序必须引用类库 您不需要该视图位置扩展逻辑 更新: 您的视图项目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>
您可以将它们放在与控制器名称对应的文件夹中,而不使用“controller”后缀,或者您可以将它们全部放在共享的中,是什么阻止您将视图放在同一个项目和程序集中?MyViews项目是否直接位于解决方案下?因为您需要一个完整的路径,从AppRunner开始。如何
~/../MyViews…
?@AliEzzatOdeh没有,但是分隔使其更容易实现控制整个项目的发展。@HenkHoltermanMyViews
与AppRunner
处于同一级别。我将尝试~/../../
MyAppRunner://因为我需要注册程序集
控制器:
但仍然无效异常:未找到视图“Login”。搜索了以下位置:/Views/Home/Login.cshtml/Views/Shared/Login.cshtml/Pages/Shared/Login.cshtml
services.Configure<RazorViewEngineOptions>(o =>
{
o.ViewLocationFormats.Clear();
o.ViewLocationFormats.Add("/../MyViews/{1}/{0}" + RazorViewEngine.ViewExtension);
o.ViewLocationFormats.Add("/../MyViews/Shared/{0}" + RazorViewEngine.ViewExtension);
}
<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>
Views
Home
.cshtml files
Shared
.cshtml files
_ViewImports.cshtml