use*_*430 23 validation data-annotations remote-validation asp.net-mvc-5
我需要在提交表单之前验证用户的输入字段值.
我在自定义控制器中创建了一个动作并用它装饰了该字段:
动作名称: CheckValue
控制器名称: Validate
[Remote("CheckValue", "Validate"), ErrorMessage="Value is not valid"]
public string Value { get; set; }
Run Code Online (Sandbox Code Playgroud)
问题是当我按提交时,表单正在提交,然后Value is not valid如果用户输入的值无效则显示消息.
如何验证用户输入的值并阻止在值无效时提交表单,并显示错误消息?
如果我尝试在JavaScript中检查表单是否有效$("#formId").valid()并返回true,则表示无论表的值是什么(有效与否),表单都有效.
另一方面,如果我用[Required]属性装饰另一个字段,则表单未提交,并且显示该字段所需的错误.但是,远程验证字段的场景后面不会进行验证.
adn*_*nan 36
MVC中远程验证的完整解决方案.它将检查数据库中是否存在电子邮件并显示以下错误:
电子邮件已经存在
账户控制者行动
[AllowAnonymous]
[HttpPost]
public ActionResult CheckExistingEmail(string Email)
{
try
{
return Json(!IsEmailExists(Email));
}
catch (Exception ex)
{
return Json(false);
}
}
private bool IsEmailExists(string email)
=> UserManager.FindByEmail(email) != null;
Run Code Online (Sandbox Code Playgroud)添加模型验证
[Required]
[MaxLength(50)]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[System.Web.Mvc.Remote("CheckExistingEmail", "Account", HttpMethod = "POST", ErrorMessage = "Email already exists")]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)添加脚本
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)您没有输入控制器代码。但必须是这样的:
你的代码:
[Remote("CheckValue", "Validate", ErrorMessage="Value is not valid")]
public string Value { get; set; }
Run Code Online (Sandbox Code Playgroud)
我的控制器代码(验证):
public ActionResult CheckValue(string Value)
{
if (Value == "x value")
{
// This show the error message of validation and stop the submit of the form
return Json(true, JsonRequestBehavior.AllowGet);
}
else
{
// This will ignore the validation and the submit of the form is gone to take place.
return Json(false, JsonRequestBehavior.AllowGet);
}
}
Run Code Online (Sandbox Code Playgroud)