Контекст: веб-приложение, разработанное с помощью ASPNet 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()
и вызова службы приложения (см. код cshtml.cs).
б) Клиентская сторона: избегайте отправки формы и отправляйте ее с помощью ajax и, наконец, показывайте сообщение об успешном завершении с помощью abp.notify.success(...))
(см. код javascript).
Вот вопросы, связанные с предыдущими проблемами. Я ценю ваши комментарии или предложения:
1.- Есть ли лучший способ выполнить этот сценарий с помощью утилит ABP framework?
2.- Следую ли я лучшим практикам? (размещение классов и логики в правильных слоях)
- DTO с аннотациями данных в слое Application.Contracts.
- Класс DTOValidator, который наследуется от DTO и
IValidatableObject
и реализует методValidate(...)
на уровне Application.Contracts. Это сделано для того, чтобы поддерживать простые DTO между клиентскими и прикладными сервисами. - Класс модели, который наследуется от DTOValidator и привязан к форме в .cshtml.cs (пример:
public class IndexPolicies : UpdatePolicyDtoValidator {}
)