Asp.Net Core MVC Ajax tag helper - ошибка возврата из контроллера не работает - PullRequest
0 голосов
/ 17 мая 2018

Я строю решение Asp.Net Core 2.0 MVC, используя луковую архитектуру.Я только что реализовал помощники тегов AJAX для частичного представления модальной формы POST. Это одна из статей, которые я нашел и за которыми следил. Сценарий «успеха» работает без каких-либо проблем.Моя основная проблема возникает, когда уровень бизнес-службы выдает недопустимое исключение операции .Это исключение перехватывается методом контроллера MVC, а затем добавляется в свойство модели представления с именем «ServiceError».Мой метод контроллера MVC возвращает частичное представление с полной моделью представления, которая включает сообщение об ошибке.DIV для сообщения об ошибке не показывает ошибку после возврата из метода контроллера MVC.Здесь появляется вторая проблема , помощники тегов AJAX не определяют это как сбой.Это все еще запускает "успех" JS-скрипт.Я сделал несколько поисков, но не могу найти пример или документы о том, как вернуть ошибки с контроллера MVC обратно в модальное состояние с помощью помощников тега AJAX?

Вот мой код тега формы:

 <form class="m-form m-form--fit m-form--label-align-right" 
  id="formAddress" asp-action="Create" asp-controller="Address" 
  asp-area="Admin" data-ajax="true"
  data-ajax-method="POST" data-ajax-complete="onComplete"
  data-ajax-success="onSuccess"
  data-ajax-failure="onFailed">

Это мой метод контроллера MVC:

    [HttpPost]
    [AutoValidateAntiforgeryToken]
    public async Task<IActionResult> Create(ViewModel.AddressViewModel addressViewModel)
    {
        try
        {
            if (ModelState.IsValid)
            {
                var newId = await _addressServiceClient.CreateAddress(addressViewModel);
                addressViewModel.Id = newId;
            }
        }
        catch (System.InvalidOperationException ioex)
        {
            ModelState.AddModelError(nameof(ViewModel.AddressViewModel), ioex.Message);
            addressViewModel.ServiceError = ioex.Message.ToString();
        }
        catch (System.Exception ex)
        {
            addressViewModel.ServiceError = ex.Message.ToString();
        }
        return PartialView("~/Areas/Shared/Views/_AddAddressPartial.cshtml", addressViewModel);
    }

Вот div, который отображает свойство ошибки службы:

@if (Model.ServiceError != "")
 {
    <div class="alert alert-danger">@Model.ServiceError</div>
 }

Согласно комментарию Стивена, я попыталсянижеприведенное изменение и его обновление ajax div у меня не установлено.AJAX Update div

1 Ответ

0 голосов
/ 18 мая 2018

Основано на отзывах Стивена.Я вернул свой код в метод JQuery AJAX.Я думал, что помощники data-ajax были новым предпочтительным способом выполнения AJAX в ядре .NET?Плюс его меньше кода!: -)

Вот рабочий код.

    $.ajax({
    type: 'post',
    url: createAddressUrl,
    data: $('#formAddress').serialize(),
    success: function (result) {
       //POST returned error
        if (!result.success) {
            var mvcError = "";
            mvcError = result.responseText;
            swal({
                "title": "1-Create address ERROR!",
                "text": mvcError,
                "type": "error",
                "confirmButtonClass": "btn btn-secondary m-btn m-btn--wide"
            });
            return false;
        }
        else {
            $('#m_modal').modal('hide').slideDown();
            window.location.reload();
        }   
    },
    error: function (result) {
        var mvcError = "";
        mvcError = result.responseText;
        swal({
            "title": "2-Create address submission FAILED!",
            "text": mvcError,
            "type": "error",
            "confirmButtonClass": "btn btn-secondary m-btn m-btn--wide"
        });
        return false;
    }

});
...