Использование TagHelpers в представлениях областей

Я потратил последний час на рефакторинг, чтобы использовать Areas, теперь все мои представления, похоже, не имеют функции 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>

...and this is the rendered 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», но это просто отображает verbtim, как и остальные.

Все это работало нормально, когда они находились в ~/Views/Name/Index.cshtml, переместите их в ~/Areas/Name/Views/Name/ и ничего...

Какие-нибудь мысли? Стив


person Steve McNiven-Scott    schedule 23.09.2016    source источник
comment
У вас есть папка _ViewImports.cshtml в папке ~/Areas/Name/Views/? Вероятно, его не существует.   -  person adem caglin    schedule 23.09.2016


Ответы (2)


Согласно официальному документы:

Директива @addTagHelper делает вспомогательные функции тегов доступными для представления. В этом случае файл представления — Views/_ViewImports.cshtml, который по умолчанию наследуется всеми файлами представлений в папке и подкаталогах Views; предоставление помощников по тегам. В приведенном выше коде используется синтаксис подстановочных знаков («*»), чтобы указать, что все вспомогательные функции тегов в указанной сборке (Microsoft.AspNetCore.Mvc.TagHelpers) будут доступны для каждого файла представления в каталоге или подкаталоге Views.

Если вы используете один макет для каждой области, чтобы использовать встроенные помощники тегов, вы должны добавить _ViewImports.cshtml в папку ~/Areas/Name/Views/ (если вы используете общий макет, вам это не нужно. См. проект MusicStore для примера общего макета).

Я предполагаю, что вы использовали один макет для каждой области и не добавили _ViewImports.cshtml ~/Areas/Name/Views/. Скопируйте /Views/_ViewImports.cshtml в ~/Areas/Name/Views/.

person adem caglin    schedule 23.09.2016
comment
Это работает. но знаете ли вы, как применить это также во всех областях? Скажем, я использую корень Layout = ~/Views/Shared/_Layout.cshtml; - person Yiping; 11.03.2018
comment
Привет, мне было интересно, как это будет работать в областях без копирования файла _ViewImports.cshtml, поэтому я скачал демо. Оказывается, это не работает. Демонстрация не использует хелперы тегов в этой области, она использует HTMLHelpers, поэтому кажется, что это работает. Таким образом, с вашим _ViewStart.cshtml вам всегда нужно копировать _ViewImports.cshtml в свою область. Немного раздражает, но другого способа я не нашел. Или вообще не используйте вспомогательные функции тегов и используйте HTMLHelpers. Который мне почти нравится больше в любом случае. - person 5earch; 12.04.2018

Как оказалось, добавление файла _ViewImports.cshtml в папку Areas/ приводит к каскадной видимости файла для всех Areas/{area}/views в папке.

Итак, вместо:

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

Мы можем просто сделать:

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

Или более визуально

пример структуры файла для _ViewImports в областях

person Dezzamondo    schedule 22.07.2020