ASP.NET MVC3 技术(六) MVC3 远程验证

有几天没有更新文章了,今天发表一篇 ASP.NET MVC 3 中远程验证(Remote Validation)的文章。Remote Validation 其实在 MVC 3 正式版发布前就已经有了,主要作用是实现客户端的异步验证,如用户注册时检测邮箱是否已被注册等。这样就如我们以前常用 Ajax 的方式检测一样,如果邮箱已被注册能很快的返回给用户相关信息,提高了用户体验。

往下看前,我们先看看下边两张图片,看过后相信你就会对本篇要实现的目标有所了解了,如下:

asp.net mvc3 远程验证                                         asp.net mvc3 远程验证

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 后,验证就会失败,所有我们有必要在数据库表设计时添加唯一性约束。

posted on 2011-10-26 16:58  caling  阅读(682)  评论(0编辑  收藏  举报

导航