我正在构建一个使用洋葱架构的Asp.Net Core2.0MVC解决方案。我刚刚为部分视图模式表单POST实现了AJAX标记帮助程序。这是我发现和跟踪的其中一个弧。 --“成功”场景完美地工作,没有任何问题。当我的业务服务层抛出无效的操作异常时,我的主要问题出现了。这个异常被MVC控制器方法捕获,然后添加到一个名为"ServiceError“的视图模型属性中。我的MVC控制器方法返回包含错误消息的完整视图模型的部分视图。当从MVC控制器方法返回时,错误消息的DIV没有显示错误。的第二个问题出现了,AJAX标记助手没有检测到这是一个失败。它仍然会触发“成功”的JS脚本。我做了几次搜索,但似乎找不到一个示例或文档,说明如何使用AJAX标记帮助将MVC控制器的错误返回到模式?
这是我的表单标记代码:
<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>
}
根据Stephen的评论,我尝试了下面的更改,它没有更新我设置的ajax。
发布于 2018-05-18 12:38:57
根据斯蒂芬的反馈。我将代码返回到JQuery AJAX方法。我认为数据- AJAX助手是在.NET核心中执行AJAX的新的首选方法?加上它的较少代码!:-)
这是工作代码。
$.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;
}
});
https://stackoverflow.com/questions/50400245
复制