【问题标题】:Display alternative search paths for the current view in ASP.NET Core MVC在 ASP.NET Core MVC 中显示当前视图的替代搜索路径
【发布时间】:2018-02-07 17:59:59
【问题描述】:

出于调试目的,我想知道可以使用的其他视图路径,而不是最终呈现的 Razor 视图。通常不难猜测,但我使用的是自定义IViewLocationExpanders,它可以动态改变搜索路径。是否可以在 ASP.NET Core MVC 中为任何视图渲染尝试获取该信息?

类似于这个问题,Show current search paths for a view,但针对 ASP.NET Core。

我的具体情况是调用 Html.EditorFor(m => m.UserRole) 最终呈现我的 EditorTemplates/Object.cshtml 文件,而不是我在非标准位置拥有的 EditorTemplates/UserRole.cshtml 自定义 IViewLocationExpander 应该出现。显然我已将我的 UserRole.cshtml 放在我认为应该搜索但不是的位置。

【问题讨论】:

  • 嗯,看起来 ASP.Net Core 中的视图引擎仅在找不到视图时才为您提供搜索位置的列表,但我想这不是您真正想要的?
  • Correct @DavidG 该异常的搜索路径基本上是我想要的,除了在找到并呈现视图时我想要它。我为我的问题添加了更多细节。

标签: razor asp.net-core-mvc


【解决方案1】:

以下近似于对 Html.EditorFor 的调用在幕后所做的工作并适用于我目前的情况,但我希望其他人可以提供此问题的通用解决方案。

@inject Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine ViewEngine
<pre>@string.Join("\n", ViewEngine
    .FindView(ViewContext, "EditorTemplates/" + 
        (ViewData.ModelMetadata.TemplateHint ?? ViewData.ModelMetadata.DataTypeName ?? ViewData.ModelMetadata.ModelType.Name), isMainPage: false)
    .SearchedLocations)</pre>

【讨论】:

  • 感谢@DavidG 我忘记了@inject 声明。我更新了代码。
  • 当它成功找到视图时这是否有效?我上面的评论是因为我认为它没有。
  • @DavidG 我现在在我的 EditorTemplates/Object.cshtml 视图中使用它,它帮助我弄清楚我做错了什么。为什么你认为它不起作用?
猜你喜欢
  • 1970-01-01
  • 2019-09-07
  • 2019-07-30
  • 2010-11-19
  • 2020-04-13
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
相关资源
最近更新 更多