2013-02-27 29 views
0

因为我是新来的这个MVC3无法弄清楚这一点。这里的情况 -MVC3显示验证消息通过检查数据库

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

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

任何人都可以帮助我吗?

提前

回答

1

非常感谢您可以使用[Remote]属性,它可以让你通过发送一个AJAX请求到服务器来执行此验证。我们的想法是装饰与远程属性视图模型您的电子邮件属性标识将被调用来验证控制器动作:

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

一提的是,你需要进行内部t时的相同的检查是很重要的他控制你提交表单的行为,因为在用户最后一次验证电子邮件是否可用以及提交表单的时间之间,电子邮件可能已经被其他人采取:

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

非常感谢。它的工作:) – SAF 2013-02-27 16:26:10

1

您可以使用[远程]您可以轻松地提供一个网址去验证项目。 或者你可以有你的自定义数据注释在哪里你可以写你的自定义逻辑。

远程属性验证将与AJAX的帮助,当你在文本框中输入内容被解雇,不过自定义属性当您提交的内容,并调用Model.IsValid()方法验证将被解雇。 快乐编码

Link for how to use Remote Attribute

+0

谢谢。有效 – SAF 2013-02-27 16:28:54