【发布时间】:2020-11-19 16:32:06
【问题描述】:
使用 ASP.NET Core 不显眼的客户端验证,我想在字段更改时显示验证摘要,不仅仅是在表单提交上。
<div asp-validation-summary="All"></div> 元素在提交表单时显示每个字段的相关错误消息,但在修改字段时不显示(并且修改状态无效)。
这是我的示例代码:
我的模特:
public class InviteNewUser
{
[DisplayName("Email Address")]
[Required(ErrorMessage = "Please provide the invitee's Email Address")]
[EmailAddress(ErrorMessage = "Please provide a valid email address")]
[StringLength(254, ErrorMessage = "Maximum email address length exceeded")]
public string EmailAddress { get; set; }
}
我的表格:
@model InviteNewUser
<form data-ajax="true"
data-ajax-url="@Url.Action("InviteNewUser","Account")"
data-ajax-method="POST"
data-ajax-success="success"
asp-antiforgery="true">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend ">
<label class="input-group-text" asp-for="@Model.EmailAddress">Invitee's Email</label>
</div>
<input class="form-control" asp-for="@Model.EmailAddress" />
</div>
</div>
<div asp-validation-summary="All" class="text-danger"></div>
<button type="submit" class="btn btn-primary">Invite</button>
</form>
@section scripts {
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-ajax-unobtrusive/3.2.6/jquery.unobtrusive-ajax.js"></script>
<script>
function success() {
alert("Success!");
}
</script>
}
我的控制器:
[Authorize]
public class AccountController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> InviteNewUser(InviteNewUser viewModel)
{
if (!ModelState.IsValid)
{
return View("~/Views/MyForm.cshtml",viewModel);
}
return Ok();
}
}
因此,如果用户输入了无效的电子邮件(例如零长度或无效的电子邮件格式),它应该显示在验证摘要中。
【问题讨论】:
-
我的回复有帮助您解决问题吗?如果没有,请告诉我您的问题。如果解决了,请接受它作为答案,这将对有同样问题的人有所帮助。
-
抱歉,我现在正在休息,我没有机会测试这两种解决方案,但我会尽快通知您!并将最佳解决方案标记为已接受
标签: c# asp.net-core asp.net-core-mvc unobtrusive-validation