因为我是这个 MVC3 的新手,所以无法弄清楚这一点。情况如下——
我有一个表格。当客户输入电子邮件地址时,onkeyup 会检查电子邮件地址在数据库中已存在的位置。如果是,我想在文本框旁边显示验证错误消息“数据库中已存在电子邮件”,并且我想阻止用户提交表单,直到客户尝试使用新的电子邮件地址。我在模型中设置的其余验证规则。但这需要检查 DB 。
问题是我不知道如何覆盖 jquery 验证并在文本框旁边显示特定的验证错误消息。
有人可以帮我吗?
提前谢谢了
因为我是这个 MVC3 的新手,所以无法弄清楚这一点。情况如下——
我有一个表格。当客户输入电子邮件地址时,onkeyup 会检查电子邮件地址在数据库中已存在的位置。如果是,我想在文本框旁边显示验证错误消息“数据库中已存在电子邮件”,并且我想阻止用户提交表单,直到客户尝试使用新的电子邮件地址。我在模型中设置的其余验证规则。但这需要检查 DB 。
问题是我不知道如何覆盖 jquery 验证并在文本框旁边显示特定的验证错误消息。
有人可以帮我吗?
提前谢谢了
您可以使用[Remote]
允许您通过向服务器发送 AJAX 请求来执行此验证的属性。这个想法是用 Remote 属性装饰视图模型上的 Email 属性,该属性指示将被调用以验证的控制器操作:
[Remote("IsEmailAvailable", "Validation")]
public string Email { get; set; }
然后编写一个控制器操作来执行此验证:
public ActionResult IsEmailAvailable(string email)
{
if (CheckEmailAvailability(email))
{
return Json(true, JsonRequestBehavior.AllowGet);
}
return Json("Sorry, the specified email is already taken", JsonRequestBehavior.AllowGet);
}
然后在您的视图中,您将拥有相应的字段:
<div>
@Html.LabelFor(x => x.Email)
@Html.EditorFor(x => x.Email)
@Html.ValidationMessageFor(x => x.Email)
</div>
重要的是要提到您需要在您提交表单的控制器操作中执行相同的检查,因为在用户最后一次验证电子邮件是否可用和提交表单的时间之间电子邮件可能已被其他人占用:
[HttpPost]
public ActionResult ProcessFormSubmit(MyViewModel model)
{
// Warning this will not call the validation controller action specified
// by the Remote attribute
if (!ModelState.IsValid)
{
return View(model);
}
// now make sure you check for the email
if (!CheckEmailAvailability(email))
{
// the email is already taken
return View(model);
}
// at this stage the model is valid => you could process it
...
}
您可以使用[Remote]轻松提供用于验证项目的 URL。否则,您可以在 其中编写自定义逻辑的自定义数据注释。
当您在文本框中输入内容时,远程属性验证将在 ajax 的帮助下触发,但是当您提交内容并调用Model.IsValid()方法时,将触发自定义属性验证。快乐编码