.NET Core - Обработка ошибок FluentValidation в AJAX - PullRequest
0 голосов
/ 07 ноября 2018

Как следует из названия. Как мне обработать ошибку в FluentValidation, когда я использую пост формы с AJAX / jQuery?

вот мой JS

function Create(controlId: any) {
    var control = $('#' + controlId);
    var controller = control.data('controller');
    var url = '/' + controller + '/Create';
    var serializeForm = control.serialize();

    $.ajax({
        url: url,
        type: 'post',
        data: serializeForm,
        success: function (data) {
            if (data && data.IsSuccess == true) {
                // do success
            }
            else if (data && data.IsSuccess == false) {
                // this one if there is error in my service
            }
        },
        error: function (e) {
            // do error
        }
    });
}

и вот мой контроллер

[HttpPost]
public virtual async Task<IActionResult> Create([CustomizeValidator(RuleSet = "Create")] TViewModel vm)
{
    if (ModelState.IsValid)
    {
        var result = await service.CreateAsync(vm, 1);

        return Json(result);
    }

    return View(vm);
}

Возможно ли это сделать с моим текущим кодом?

В моем ServiceResult у меня есть:

RecordId
IsSuccess
Message (this one is for error in the service)

И для моего текущего кода я не могу обработать, если в моем FluentValidation есть ошибка, потому что я только возвращаю код View(vm)

Так есть ли другой способ справиться с этим?

Извините за мой английский. Заранее спасибо

1 Ответ

0 голосов
/ 08 ноября 2018

Согласно документации здесь , для обычного MVC вам просто нужно вернуть View(model), если состояние модели не удается. Этот код обычно используется, когда ModelState содержит все сообщения об ошибках. Вот как вы можете настроить то же самое для ajax:

На стороне сервера

Внутри действия вы можете использовать return BadRequest(ModelState) вместо return View(vm) в своем коде. Обратите внимание, что для веб-API (ajax требуется доступ к веб-API), возвращение неверного запроса (400) является стандартом, когда предоставленный ввод недействителен. Функция BadRequest(object), ошибка http 400 с ошибочным запросом, сериализует object и возвращает его как JSON. Запуск BadRequest(ModelState), попытка сериализации ModelState. Состояние модели предназначено для возврата коллекции сообщений об ошибках при сериализации.

На стороне клиента

В своем коде js вы можете проверить ответ 400, чтобы проверить, есть ли ошибка. Вы можете использовать console.log, чтобы распечатать ошибку в случае 400. Это поможет вам понять формат ответа на ошибку. Примечание Начиная с версии .net core 2.2 (выпуск декабрь) этот формат вывода изменится. Если вы обновитесь до 2.2 позже, вам придется изменить свой js-код.

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