.NET Core - 在 AJAX 中处理错误 FluentValidation
.NET Core - Handling Error FluentValidation in AJAX
正如标题所说。当我将表单 post 与 AJAX / jQuery 一起使用时,如何处理 FluentValidation 中的错误?
这是我的 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)
那么还有其他方法可以处理吗?
对不起我的英语。提前致谢
根据 documentation here,对于普通 MVC,如果模型状态失败,您只需 return View(model)
。此代码通常在 ModelState
包含所有错误消息时使用。以下是如何为 ajax 设置相同的内容:
在服务器端
在操作中,您可以在代码中使用 return BadRequest(ModelState)
而不是 return View(vm)
。请注意,对于 web APIs(ajax 需要访问 web API),returning bad request (400) 是提供的输入无效时的标准。 BadRequest(object)
函数一个 http 400 错误请求错误,序列化 object
return 将其设为 JSON。 运行 BadRequest(ModelState)
,尝试序列化 ModelState
。模型状态被设计为return序列化时错误信息的集合。
在客户端
在你的js代码中,你可以检查400响应来验证是否有错误。如果是 400,您可以使用 console.log
打印错误。这将帮助您理解错误响应的格式。 注意 自 .net core 2.2(12 月发布)起,此输出格式将会更改。如果您稍后升级到 2.2,您将不得不更改您的 js 代码。
正如标题所说。当我将表单 post 与 AJAX / jQuery 一起使用时,如何处理 FluentValidation 中的错误?
这是我的 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)
那么还有其他方法可以处理吗?
对不起我的英语。提前致谢
根据 documentation here,对于普通 MVC,如果模型状态失败,您只需 return View(model)
。此代码通常在 ModelState
包含所有错误消息时使用。以下是如何为 ajax 设置相同的内容:
在服务器端
在操作中,您可以在代码中使用 return BadRequest(ModelState)
而不是 return View(vm)
。请注意,对于 web APIs(ajax 需要访问 web API),returning bad request (400) 是提供的输入无效时的标准。 BadRequest(object)
函数一个 http 400 错误请求错误,序列化 object
return 将其设为 JSON。 运行 BadRequest(ModelState)
,尝试序列化 ModelState
。模型状态被设计为return序列化时错误信息的集合。
在客户端
在你的js代码中,你可以检查400响应来验证是否有错误。如果是 400,您可以使用 console.log
打印错误。这将帮助您理解错误响应的格式。 注意 自 .net core 2.2(12 月发布)起,此输出格式将会更改。如果您稍后升级到 2.2,您将不得不更改您的 js 代码。