Контекст : веб-приложение, разработанное с помощью AS PNet Core поверх структуры ABP 2.9 (страницы Razor).
Мне нужно проверить модель (она реализует Validate(...)
из IValidatableObject
и вызывает службу приложения для выполнения некоторых проверок), затем вызывает службу приложения и, наконец, показывает сообщение об успешном завершении (с тем же внешним видом, что и abp.notify.success(...)
).
Цель этого поста: Чтобы проверить, следую ли я лучшим практикам или делаю все правильно с помощью структуры ABP. Если да, то есть несколько предложений команде ABP.
Что я пробовал :
1. - Сначала я попытался отправить форму, но не сделал этого. Найдите простой способ показать сообщение об успешном завершении (например, abp.notify.success
) из метода сервера: public virtual async Task<IActionResult> OnPostAsync()
.
Было бы неплохо иметь простой способ отправки клиентских сообщений (например, abp.notify.success
ед.) Со стороны сервера. Может быть, есть способ, и я его не нашел.
2. - Во-вторых, я попытался отменить отправку формы и выполнить проверку на стороне клиента, вызвать службу приложения и также показать сообщение со стороны клиента. Проблема здесь в том, что проверки метода public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
не выполнялись с клиентской стороны, вызывая form.valid()
.
Возможное улучшение структуры ABP будет заключаться в том, чтобы включить простой способ выполнения того же сервера DataValidation()
со стороны клиента. Возможно, он существует, и я его не нашел.
3.- Наконец, я сделал следующее:
a) Сторона сервера: выполнить ValidateModel()
и вызвать приложение сервис ( см. cs html .cs код ).
b) Клиентская сторона: избегайте отправки формы и отправляйте ее с помощью ajax и, наконец, показывайте сообщение об успешном завершении с помощью abp.notify.success(...))
( см. javascript код ).
Вот вопросов , связанных с предыдущими проблемами. Я ценю ваши комментарии или предложения:
1.- Есть ли лучший способ выполнить этот сценарий с использованием утилит инфраструктуры ABP?
2.- Следую ли я передовой практике? (размещение классов и c классов и логики в правильных слоях)
- DTO с аннотациями данных в слое Application.Contracts.
- Класс DTOValidator, наследуемый от DTO и
IValidatableObject
и реализует метод Validate(...)
в слое Application.Contracts. Это сделано для того, чтобы поддерживать простые DTO между клиентскими службами и приложениями. - Класс модели, который наследуется от DTOValidator и привязан к форме в .cs html .cs (пример:
public class IndexPolicies : UpdatePolicyDtoValidator {}
)