模型:
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 {{ 1}}功能代码。
请有人指导。 提前致谢。
答案 0 :(得分:0)
感谢上面的评论中的@JohanP。
下面解决了它。
if (!ModelState.IsValid)
{
var modelErrors = new List<string>();
foreach (var modelState in ModelState.Values)
{
foreach (var modelError in modelState.Errors)
{
modelErrors.Add(modelError.ErrorMessage);
}
}
Response.StatusCode = 400;
return Json(modelErrors[0]);
}