Как получить Asp.Net Ядро для возврата правильного представления

#c# #asp.net-core #routes

#c# #asp.net-core #маршруты

Вопрос:

Мой Asp.Net Основной проект организован следующим образом:

 MyApp
--Folder1
  Folder1Controller.cs
  Index.cshtml
--Folder2
  Folder2Controller.cs
  Index.cshtml
--Views
  Shared
  etc..
  

Я изменил запуск, чтобы он знал об этой структуре каталогов:

 services.Configure<RazorViewEngineOptions>(options =>
{
    options.ViewLocationFormats.Clear();
    options.ViewLocationFormats.Add($"/Folder1/{{0}}{RazorViewEngine.ViewExtension}");
    options.ViewLocationFormats.Add($"/Folder2/{{0}}{RazorViewEngine.ViewExtension}");
    options.ViewLocationFormats.Add($"/Views/Shared/{{0}}{RazorViewEngine.ViewExtension}");
});
  

Код для Folder1Controller выглядит следующим образом:

 public IActionResult Index()
{            
    return View();
}
  

И это работает нормально. Однако код для Folder2Controller выглядит точно так же. Проблема в том, что при выполнении Index() метода для Folder2 него Folder1 сначала просматривается. Я могу обойти это, сделав это:

 public IActionResult Index(string id)
{
    return View("/Folder2/Index.cshtml");
}
  

Мой вопрос в том, есть ли способ получить Asp.Net Как сначала заглянуть в текущий каталог? Даже если я использую относительный путь ( "./Index" ), он все равно переходит к Folder1 первому.

Комментарии:

1. Исходное местоположение контроллеров не сопоставляется с путями uri. Ближайшей функцией может быть Area’s.

Ответ №1:

Вы можете добавить папку с именем с именем контроллера в свою папку folder1, folder2, чтобы route мог распознать, какое представление нужно найти.

Во-первых, измените структуру папок следующим образом:

 MyApp
--Folder1
  Folder1Controller.cs
  --Folder1
    Index.cshtml
--Folder2
  Folder2Controller.cs
  --Folder2
    Index.cshtml
--Views
  Shared
  etc..
  

Запуск:

   services.Configure<RazorViewEngineOptions>(options =>
                {
                    options.ViewLocationFormats.Clear();
                    options.ViewLocationFormats.Add("/Folder1/{1}/{0}"   RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add("/Folder2/{1}/{0}"   RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"/Views/Shared/{{0}}{RazorViewEngine.ViewExtension}");
                });
  

Результат:
введите описание изображения здесь