在区域视图中使用TagHelpers

时间:2016-09-23 04:17:26

标签: asp.net-core tag-helpers

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

所以这就是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问题参考&#34; asp-route-area&#34;但这只会像其他人一样呈现出来。

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

有什么想法? 史蒂夫

2 个答案:

答案 0 :(得分:13)

根据官方docs

  

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

如果您为每个区域使用一个布局,要使用内置标记帮助器,您应在_ViewImports.cshtml文件夹中添加~/Areas/Name/Views/(如果您使用共享布局,则不需要。请参阅{{ 3}}用于共享布局示例。)

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

答案 1 :(得分:2)

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

所以不是:

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

我们可以做到:

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

或更直观地

example file structure for _ViewImports in Areas