【发布时间】:2019-10-13 03:44:11
【问题描述】:
型号:
public class RegisterViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.Password)]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
控制器:
[AllowAnonymous]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (!ModelState.IsValid)
{
var modelErrors = new List<string>();
foreach (var modelState in ModelState.Values)
{
foreach (var modelError in modelState.Errors)
{
modelErrors.Add(modelError.ErrorMessage);
}
}
return Json(new { success = false, responseText = modelErrors[0] });
}
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(ModelState);
}
查看:
<div id="divError" class="alert alert-danger collapse">
<a id="linkClose" class="close" hred="#">×</a>
<div id="divErrorText"></div>
</div>
javaScript:
$('#btnRegister1').click(function () {
$.ajax({
url: '/Account/Register',
method: 'POST',
data: {
Email: $('#txtEmail').val(),
Password: $('#txtPassword').val(),
ConfirmPassword: $('#txtConfirmPassword').val(),
__RequestVerificationToken: token,
},
success: function () {
$('#successModal').modal('show');
},
error: function (jqXHR) {
$('#divErrorText').text(jqXHR.responseText);
$('#divError').show('fade');
}
});
});
此代码用于显示使用 AJAX 的 MVC 验证错误。代码按 AJAX success 函数的预期运行,但未能命中 AJAX error 函数代码,而是运行 success 函数,即使存在验证错误并且它应该运行 AJAX error 函数代码。
谁能指导一下。 提前致谢。
【问题讨论】:
-
当您遇到验证错误时,您需要返回一个适当的状态码,一个 400 或 422。您返回一个 200,这是一个成功状态码,这就是为什么您的 ajax 调用不被视为错误的原因.
-
这听起来是正确的,但我在这里有
success = false:return Json(new { success = false, responseText = modelErrors[0] });在我的Controller代码中。想知道那是做什么的。 (-; -
您的
success=false是您的 json 有效负载中的一个密钥,该密钥将传递给您的客户端。如果你看它,它有点矛盾。您正在返回一个成功的响应代码,但是在有效负载中您说它不成功。只需返回BadRequest(modelErrors)而不是json -
@JohanP 你为什么在评论中回答问题而不是回答?
标签: javascript c# ajax asp.net-mvc-4 model-view-controller