Структура ABP - лучший способ ValidateModel () и показать сообщение об успешном завершении - PullRequest
0 голосов
/ 16 июня 2020

Контекст : веб-приложение, разработанное с помощью 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 {})

Ответы [ 2 ]

0 голосов
/ 26 июня 2020
• 1000 с моей третьей попытки).

b) Клиентская сторона: использовать простую кнопку вместо отправки и вызывать abpAjaxForm(options) с abp.notify.success() при успешной функции. Затем отправьте форму:

var _defaultPoliciesForm = $("#DefaultPoliciesForm");
var _saveButton = $("#SaveButton"); 

_saveButton.click(function (e) {
    var options = {
        beforeSubmit: function (arr, form) {
            _saveButton.buttonBusy(true);
        },
        success: function (responseText, statusText, xhr, form) {
            abp.notify.success(l("UpdatedSuccessfully"));
        },
        complete: function (jqXhr, status, form) {
            _saveButton.buttonBusy(false);
        }
    }
    _defaultPoliciesForm.abpAjaxForm(options);
    _defaultPoliciesForm.submit();
});

Надеюсь, это может быть полезно другим людям с той же проблемой. В любом случае, я помню свои предложения команде ABP:

  • Возможность отправлять клиентские сообщения, например abp.notify.success(...), со стороны сервера.

  • Возможность выполнения той же проверки сервера, что и DataValidation() со стороны клиента

0 голосов
/ 18 июня 2020

Вы можете отменить отправку формы и напрямую позвонить в службу поддержки. Затем используйте DataAnnotations для проверки вашего dto. Если вам нужен пользовательский logi c для проверки, вы можете проверить его в методе службы приложения (или создать пользовательский DataAnnotation).

См. https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=MVC#dynamic - javascript -proxies для лучший способ вызвать сервисную службу со стороны javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...