Я работаю на веб-сайте ASP.NET Core, используя Razor Pages вместо MVC.
Я столкнулся с ситуацией, когда мне нужно реализовать общий компонент, который можно использовать на разных страницах.Компонент - Простая ветка комментариев.На разных страницах подписанные пользователи могут отправлять свои комментарии.
Компонент должен состоять из 2 частей:
- Список комментариев - это список комментариев, который может быть легко реализован с помощью любого ViewComponentили частичная страница;
- Добавить элемент управления комментарием - это текстовая область и кнопка отправки, которые позволяют пользователю отправлять свой собственный комментарий.
Чего я хочу добиться, так это использовать ViewComponent или частичную страницуили какой-либо другой метод размещения некоторой разметки с начальными параметрами на любой странице, чтобы включить эту функцию комментариев без копирования / вставки одного и того же кода со страницы на страницу.
И у меня есть несколько проблем с этим.
Как я уже упоминал, ViewComponent можно использовать для отображения списка комментариев на любой странице, просто добавив следующую разметку:
@await Component.InvokeAsync("Comments", new { type="NewsItem", id="@Model.Item.ID" })
Таким образом, CommentsViewComponent вызовет ef.core DBContext для загрузки комментариев для определенного типа иЯ бы.Это работает отлично.Но проблема начинает возникать, когда мне нужно отправить сообщения из разметки ViewComponent и обработать эти сообщения.
Планируется сделать 3 возможных почтовых звонка:
- Добавить новый комментарий
- Удалить существующий комментарий
- Редактировать существующий комментарий
Первый возможный подход - определить 3 обработчика на странице NewsItem и вызвать их, используя tag-helper из ViewComponent.Но тогда мне нужно было бы определить 3 одинаковых обработчика на любой другой странице, где мне понадобятся те же функции.
Другой подход, о котором я думал, - определить поддельный PageModel, который будет содержать эти 3 обработчика, и ViewComponent будетразместить на этой странице, используя Ajax.Единственное осложнение заключается в том, что после выполнения этих сообщений мне нужно заставить ViewComponent перерисовывать себя, поскольку комментарии были изменены (удалены, добавлены или отредактированы).
Таким образом, в результате компонент будет содержать следующие части:
- ViewComponent для отображения необходимой разметки
- JavaScript-код для отправки сообщений по кликам клиентов
- Поддельные PageModel для обработки сообщений.
ДонМне не нравится такой подход, и я думаю, что он слишком сложен для такой простой задачи.Это мой первый проект Razor Pages для ядра APS.NET, поэтому у меня нет большого опыта по реализации таких изолированных компонентов, и я надеюсь, что вы, ребята, поможете мне понять, как это можно реализовать, чтобы лучше следовать принципам SOLID и DRY.
Спасибо.