C# 当视图';的父目录结构与其控制器的名称不同
我一直在重组我的.NETMVC核心项目,以使其更易于管理。我的项目的简化版本如下:C# 当视图';的父目录结构与其控制器的名称不同,c#,asp.net,asp.net-mvc,razor,asp.net-core,C#,Asp.net,Asp.net Mvc,Razor,Asp.net Core,我一直在重组我的.NETMVC核心项目,以使其更易于管理。我的项目的简化版本如下: Controllers/ CatController.cs DogController.cs Resources/ Views/ Cat/ Index.en-CY.resx Dog/ Index.en-CY.resx Views/ Cat/ Index.cshtml Dog/
Controllers/
CatController.cs
DogController.cs
Resources/
Views/
Cat/
Index.en-CY.resx
Dog/
Index.en-CY.resx
Views/
Cat/
Index.cshtml
Dog/
Index.cshtml
Controllers/
Animal/
Cat/
CatController.cs
Dog/
DogController.cs
AbstractAnimalController.cs
Resources/
Views/
Animal/
Cat/
Index.en-CY.resx
Dog/
Index.en-CY.resx
Views/
Animal/
Cat/
Index.cshtml
Dog/
Index.cshtml
本地化对于这种结构非常有效,但是结构本身(在实际项目中)很难导航
新的结构如下:
Controllers/
CatController.cs
DogController.cs
Resources/
Views/
Cat/
Index.en-CY.resx
Dog/
Index.en-CY.resx
Views/
Cat/
Index.cshtml
Dog/
Index.cshtml
Controllers/
Animal/
Cat/
CatController.cs
Dog/
DogController.cs
AbstractAnimalController.cs
Resources/
Views/
Animal/
Cat/
Index.en-CY.resx
Dog/
Index.en-CY.resx
Views/
Animal/
Cat/
Index.cshtml
Dog/
Index.cshtml
然而,这种结构打破了视图本地化。具体来说,视图不再使用资源文件,在以前显示值时显示键
我已经将问题缩小到控制器名称仍然是CatController
,但是Cat
视图的位置现在是Animal/Cat/Index.cshtml
如果我将视图和资源保留在旧结构中,本地化是可行的,但我更希望能够使其与控制器
目录结构保持一致
在每个视图中使用@injectIViewLocalizer定位器完成定位。根据微软的说法,在视图中使用IViewLocalizer时,资源应该与视图具有相同的目录结构,或者使用代表性的点表示法。它没有指定视图必须位于以其控制器命名的目录中,这就是我在这里找到的
这是.NET Core的一个bug,还是我做错了什么?您是否试图删除“资源”下的“视图”文件夹,这似乎是多余的,令人困惑。@Isma,据我所知,在资源
下有一个视图
文件夹用于视图本地化是标准做法(请参阅)。无论如何,我会尝试:)你是对的,似乎是正确的方法。我想这是视图的默认行为,你不能更改它。我能想到的一个解决办法是你可以使用。在您的示例中,您创建了Animal
区域,并在其中创建了两个文件夹,一个用于控制器,另一个用于视图。在Resources
文件夹中,创建Areas
文件夹,并在其中创建与您以前创建的Animal
区域相同的结构,并放置您的资源文件。您是否尝试删除“Resources”下的“Views”文件夹,似乎是多余和令人困惑的。@Isma,据我所知,在Resources
下有一个Views
文件夹用于视图本地化是标准做法(请参阅)。无论如何,我会尝试:)你是对的,似乎是正确的方法。我想这是视图的默认行为,你不能更改它。我能想到的一个解决办法是你可以使用。在您的示例中,您创建了Animal
区域,并在其中创建了两个文件夹,一个用于控制器,另一个用于视图。在Resources
文件夹中,创建Areas
文件夹,并在其中创建与之前创建的Animal
区域相同的结构,然后放置资源文件。