C# 当视图';的父目录结构与其控制器的名称不同

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/

我一直在重组我的.NETMVC核心项目,以使其更易于管理。我的项目的简化版本如下:

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
区域相同的结构,然后放置资源文件。