MVC3通过检查DB显示验证消息

时间:2013-02-27 07:18:11

标签: jquery asp.net-mvc-3 validation

由于我是新手,因此MVC3无法解决这个问题。情况就是这样 -

我有一张表格。当客户输入电子邮件地址时,onkeyup会检查数据库中已存在电子邮件地址的位置。如果是,我想在文本框旁边显示验证错误messgae“电子邮件已存在于数据库中”,我想阻止用户提交表单,直到客户尝试使用新的电子邮件地址。我在模型中设置的其余验证规则。但是这个需要检查数据库。

问题是我不知道如何覆盖jquery验证并在文本框旁边显示特定的验证错误消息。

有人可以帮我吗?

非常感谢提前

2 个答案:

答案 0 :(得分:1)

您可以使用[Remote]属性,该属性允许您通过向服务器发送AJAX请求来执行此验证。我们的想法是在视图模型上装饰您的Email属性,并使用Remote属性指示将被调用以进行验证的控制器操作:

[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
    ...
}

答案 1 :(得分:1)

您可以使用 [远程] ,您可以轻松提供验证项目的网址。 或者您可以使用自定义数据注释来编写自定义逻辑。

当您在文本框中输入内容时,将在ajax的帮助下触发远程属性验证,但是当您提交内容并调用 Model.IsValid()方法。 快乐的编码

Link for how to use Remote Attribute