【问题标题】:Using TagHelpers in Area Views在区域视图中使用 TagHelper
【发布时间】:2017-01-31 19:54:09
【问题描述】:

我花了最后一个小时重构以使用区域,现在我所有的视图似乎都没有函数 taghelpers:/

这就是 Index.cshtml 中的内容

       <div class="btn-group">
           <a asp-controller="Survey" asp-area="Admin" asp-action="Create" class="btn btn-primary">Create New</a>
       </div>

...这是呈现的 HTML :/

<div class="btn-group">
  <a asp-controller="Survey" asp-area="Admin" asp-action="Create" class="btn btn-primary">Create New</a>
</div>

Intellisense 甚至不显示 asp- 前缀,并且 asp- 属性上的语法突出显示也丢失了。

其他 SO 问题参考“asp-route-area”,但这只是像其他问题一样逐字呈现。

这些在 ~/Views/Name/Index.cshtml 中都可以正常工作,将它们移到 ~/Areas/Name/Views/Name/ 和 nopers...

有什么想法吗? 史蒂夫

【问题讨论】:

  • 您在~/Areas/Name/Views/ 文件夹中有_ViewImports.cshtml 吗?可能不存在。

标签: asp.net-core tag-helpers


【解决方案1】:

据官方docs

@addTagHelper 指令使标签助手可用于视图。 在这种情况下,视图文件是 Views/_ViewImports.cshtml,由 默认由 Views 文件夹中的所有视图文件继承,并且 子目录;使标签助手可用。上面的代码使用 通配符语法 (“*”) 指定指定的所有 Tag Helpers 程序集 (Microsoft.AspNetCore.Mvc.TagHelpers) 将可用于 Views 目录或子目录中的每个视图文件。

如果每个区域使用一种布局,要使用内置标签助手,您应该在 ~/Areas/Name/Views/ 文件夹中添加 _ViewImports.cshtml(如果您使用不需要的共享布局。请参阅 MusicStore project 共享布局示例) .

我猜您每个区域使用了一种布局,并且您没有添加 _ViewImports.cshtml ~/Areas/Name/Views/。将/Views/_ViewImports.cshtml 复制到~/Areas/Name/Views/

【讨论】:

  • 这行得通。但是你知道如何在所有领域都应用这个吗?假设我使用根 Layout = "~/Views/Shared/_Layout.cshtml";
  • 嗨,我想知道这在不复制 _ViewImports.cshtml 文件的情况下如何在区域工作,所以我下载了演示。事实证明它不起作用。该演示没有在该区域使用标签助手,它使用 HTMLHelpers,这就是它看起来有效的原因。因此,对于您的 _ViewStart.cshtml,您始终必须将 _ViewImports.cshtml 也复制到您的区域中。有点烦人,但我还没有找到其他方法。或者根本不使用标签助手并使用 HTMLHelpers。无论如何,我几乎更喜欢它。
【解决方案2】:

事实证明,将_ViewImports.cshtml 文件添加到Areas/ 文件夹会将文件的可见性级联到文件夹内的所有Areas/{area}/views

所以而不是:

-> Areas
--> Area1
----> Views
------> _ViewImports.cshtml
--> Area2
----> Views
------> _ViewImports.cshtml

我们可以这样做:

-> Areas
--> Area1
--> Area2
--> _ViewImports.cshtml

或者更直观

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2016-08-19
    • 1970-01-01
    • 2011-01-13
    • 2012-04-15
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多