.net core 2.1 повторное использование _Layout в различных проектах

Я пытаюсь повторно использовать один и тот же файл _Layout.cshtml в нескольких проектах .net core 2.1 Razor Page. В настоящее время у меня есть библиотека классов страниц Razor (Общий общий проект), в которой будет находиться файл _Layout.cshtml. Наряду с файлом макета есть файлы css и js, которые также должны быть доступны для всех других проектов (мне удалось это сделать).

вторичные проекты будут иметь ссылки на Общий общий проект и должны иметь возможность использовать из него файл _Layout.cshtml.

Моя проблема в том, что в настоящее время он не загружает общий файл _layout, когда я обращаюсь к страницам из этих проектов, вместо этого он загружает свой собственный файл макета. Если я попытаюсь удалить этот файл, появится сообщение об ошибке, что файл макета не найден. Однако, если я загружаю страницу, содержащуюся в Общем общем проекте, она загружает свой собственный _layout.

Я использовал следующие руководства, чтобы понять, где я нахожусь, но я не мог понять, как заставить вторичные проекты загружать макет в Общий общий проект.

Включение статического Ресурсы в библиотеках классов Razor в ASP.NET Core

Может ли библиотека классов Razor упаковывать статические файлы (js, css и т. д.) тоже

Повторное использование пользовательского интерфейса с библиотеками классов Razor (RCL) в ASP.NET Core

Имейте в виду, что две из этих статей основаны на совместном использовании файлов css и js (которые действительно работали), но я также читал другие примеры для макета, и мне не повезло (в настоящее время у меня нет ссылок к этим другим статьям)

Что касается того, что я написал, то сейчас я экспериментирую с примером проекта, и он такой же, как и в первой статье (Включение статических ресурсов в библиотеки классов Razor в ASP.NET Core).

ОБНОВЛЕНИЕ

Используя третью ссылку (повторное использование пользовательского интерфейса с библиотеками классов Razor (RCL) в ASP.NET Core), я смог достичь своей цели. Однако раньше я использовал ту же стратегию, и она не работала. Я собираюсь попробовать еще немного поиграть с этим. Если у меня будут другие обновления, я их опубликую.


person Lord-Link    schedule 09.11.2018    source источник


Ответы (1)


Очевидно, поскольку я работал над Включение статических ресурсов в библиотеки классов Razor в ASP.NET Core ссылка в примере оставила структуру библиотеки классов страницы по умолчанию, содержащую папки Area / MyFeatures. Я изменил это так, чтобы оно работало как последняя ссылка Повторно использовать пользовательский интерфейс с классом Razor Библиотеки (RCL) В ASP.NET Core, где Общий общий проект структурирован так же, как проект веб-приложения (без Области или Папка MyFeatures). Я также добавил:

@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers

до конца моего _ViewStart.cshtml, расположенного в Общем общем проекте.

Также в качестве примечания вы должны удалить _layout.cshtml и _viewstart.cshtml из веб-приложения, иначе он переопределит общий макет проекта.

Как бы то ни было, это, похоже, устранило проблему, и теперь она работает.

person Lord-Link    schedule 09.11.2018
comment
Нашли ли вы где-нибудь официальную документацию, касающуюся веб-сайта, перезаписывающего общие файлы проекта _viewimports и _viewstart? - person Terry; 05.01.2021
comment
@Terry Привет, это было какое-то время назад, поэтому у меня нет ни одной из моих старых ссылок, но я быстро нашел тебя. Вот ссылка (см. Раздел «Запуск кода перед каждым представлением»): docs.microsoft.com/en-us/aspnet/core/mvc/views/ Хотя в предоставляемой мной ссылке не говорится об этой ситуации, но упоминается, что они загружаются в иерархическая манера. Если я не ошибаюсь, именно поэтому у него такое поведение (загрузка из основного приложения перед попыткой загрузки из указанного проекта). - person Lord-Link; 08.01.2021
comment
Также обратите внимание, что эта ссылка взята из .net core 5.0, но я не думаю, что эта иерархическая структура загрузки изменилась между этими версиями ... Также он говорит об одном из этих файлов, но я почти уверен, что он применяет одно и то же правило ко всем из них . - person Lord-Link; 08.01.2021
comment
Если я не ошибаюсь, это значит, что все должно работать так, как я хочу? Я читал это так, как будто он запускает каждый из совпадающих файлов в иерархии. Только первый матч. Мой вопрос был здесь: stackoverflow.com/questions/65557690/, но, читая те документы, которые вы отправили, я вижу @using: все включены; дубликаты игнорируются из этого раздела docs.microsoft.com/en-us/aspnet/core/mvc/views/ - person Terry; 12.01.2021
comment
@Terry Фактически вы можете оставить _viewimports.cshtml в своем проекте сайта. Я исправлю это в своем ответе. Мне пришлось удалить только файлы _layout.cshtml и _viewstart.cshtml. Таким образом, вы должны иметь возможность импортировать на свой сайт, а затем он будет использовать общий файл проектов _viewimport.cshtml для загрузки остальных директив. Заявление на сайте @using: все включено; дубликаты игнорируются, это просто означает, что он загрузит все использования как с уровня сайта, так и с уровня общего проекта, но если у вас есть 2 похожих оператора using в обоих проектах, общие будут проигнорированы. - person Lord-Link; 12.01.2021