【问题标题】:How to get Asp.Net Core to return the correct view如何让 Asp.Net Core 返回正确的视图
【发布时间】:2020-09-21 12:25:02
【问题描述】:

我的Asp.Net Core项目安排如下:

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 的代码看起来完全一样。问题是当它为Folder2 执行Index() 方法时,它首先查看Folder1。我可以通过这样做来解决它:

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

我的问题是,有没有办法让 Asp.Net Core 首先查看当前目录?即使我使用相对路径("./Index"),它仍然会先转到Folder1

【问题讨论】:

  • 控制器的源位置没有映射到 uri 路径。最接近的特征可能是区域的。

标签: c# asp.net-core routes


【解决方案1】:

你可以在你的文件夹 1、文件夹 2 中添加一个以控制器名称命名的文件夹,这样路由就可以识别要查找的视图。

首先,像这样改变文件夹结构:

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}");
                });

结果:

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多