有几天没有更新文章了,今天发表一篇 ASP.NET MVC 3 中远程验证(Remote Validation)的文章。Remote Validation 其实在 MVC 3 正式版发布前就已经有了,主要作用是实现客户端的异步验证,如用户注册时检测邮箱是否已被注册等。这样就如我们以前常用 Ajax 的方式检测一样,如果邮箱已被注册能很快的返回给用户相关信息,提高了用户体验。
往下看前,我们先看看下边两张图片,看过后相信你就会对本篇要实现的目标有所了解了,如下:
ASP.NET MVC3 的很多新特征我们之前已经介绍过了,对于 ASP.NET MVC3 Model 层验证大家可以参考下 ASP.NET MVC3 实例(六) 增加、修改和删除操作(一)、ASP.NET MVC3 技术(一) 使用 CompareAttribute 比较属性。
首先:找到要添加验证的属性,在上边添加 Remote 属性:
[Remote("CheckEmail", "Register", ErrorMessage = "此邮箱已存在")]
public global::System.String Email
其中的参数分别为:action 中的方法名、controller 名和提示信息。
其次:完成 action 方法:
public JsonResult CheckEmail(string email)
{
AndroidEntities android = new AndroidEntities();
var result = from e in android.UserInfo
where e.Email == email
select e;
return Json(result.ToList().Count == 0, JsonRequestBehavior.AllowGet);
}
上边方法 CheckEmail() 即为 Remote 中 action中的方法名,它接收 jQuery 传递过来的参数 email 后,在 UserInfo 表中查找是否有此 email ,如果没有返回一个值为 true 的 JSON 格式内容,ASP.NET MVC 3 中 JSON 数据的传递可以参考下ASP.NET MVC3 技术(五) JSON 数据的传递。这里需要注意的是参数 email 在这里是属性的名称,大小写是不敏感的,传递时我们需要注意下,要按我的习惯就会写成strEmail。
最后,看下 View 中的代码:
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<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>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>UserInfo</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
这里我们不需要写任何代码了,到这里就已经完成了在 ASP.NET MVC3 中的远程验证,可见代码量和我们以前的方法相比大大的减少了。需要指出的是,这里的验证只是前台的验证,如果用户禁用了 javascript 后,验证就会失败,所有我们有必要在数据库表设计时添加唯一性约束。