MVC学习笔记之:ASP.NET MVC的客户端验证-jQuery.validate验证结合Model验证中的实现

时间:2022-05-17 09:14:13
关于JQuery.validate客户端验证,可以在网上找找资料, Jquery Validate客户端验证

jQuery验证控件jquery.validate.js使用说明+中文API

结合ASP.NET MVC中的运用,可以看蒋金楠大牛的博客,写的很系统,ASP.NET MVC的客户端验证:jQuery的验证.以及他相关的博客,写的非常好。

下面是我个人结合自己项目中的笔记:


Model的定义:

 
public class UserInfo
{
[Required]
[StringLength(20, ErrorMessage = "UserName can not more than 20 chars")]
public string UserName { get; set; }
[Required]
[StringLength(200)]
public string Password { get; set; }
}


View中的代码:

@model XXX.Model.User.UserInfo
<li>                            <p>                                Username                            </p>                            @Html.TextBoxFor(m => m.UserName)                            <br />                            @Html.ValidationMessageFor(m => m.UserName)                        </li>                        <li>                            <p>                                Password                            </p>                            @Html.PasswordFor(m => m.Password)                            <br />                            @Html.ValidationMessageFor(m => m.Password)                        </li>

生成的Html代码:

 <li>
<p>
Username
</p>
<input data-val="true" data-val-length="UserName can not more than 20 chars" data-val-length-max="20" data-val-required="UserName 字段是必需的。" id="UserName" name="UserName" type="text" value="" />
<br />
<span class="field-validation-valid" data-valmsg-for="UserName" data-valmsg-replace="true"></span>

</li>
<li>
<p>
Password
</p>
<input data-val="true" data-val-length="字段 Password 必须是最大长度为 200 的字符串。" data-val-length-max="200" data-val-required="Password 字段是必需的。" id="Password" name="Password" type="password" />
<br />
<span class="field-validation-valid" data-valmsg-for="Password" data-valmsg-replace="true"></span>
</li>

如果看过jquery.validate相关的文档,你可能会疑惑,jquery.validate一般都是把验证规则定义在css样式中,更规范的写法,独立写js,和html脱离开来。

<input class="required"  id="name" name="name" type="text"/>
or
 <script type="text/javascript">   1:  
2: $(document).ready(function () {
3: $("form").validate({
4: rules :{
5: name :{required: true},
6: birhthDate :{required: true, date: true},
7: blogAddress :{url: true},
8: emailAddress:{required: true, email: true}
9: },
10:
11: messages: {
12: name :{ required: "请输入姓名" },
13: birhthDate :{required: "请输入出生日期", date: "请输入一个合法的日期"},
14: blogAddress :{ url: "请输入一个合法的URL" },
15: emailAddress:{required: "请输入Email地址", email: "请输入一个合法的Email地址"}
16: }
17: });
18: });
</script>

我们发现,在Model中设置了[Required]等特性,在前台不写一行js验证的代码,客户端已经实现了验证;后台只要调用一行代码ModelState.IsValid,就实现了服务器端的验证,是不是有web form中Page.IsValid的感觉,不用写验证的代码,是不是很爽?

if (ModelState.IsValid)
{
LoginResponse response = eServiceProxy.serviceProxy.Login(request);
if (response != null && response.IsAuthenticated)
{
FormsAuthentication.SetAuthCookie(request.Username, true);
return RedirectToAction("Index", "Home");
}
else
{
ViewData["errorMsg"] = "Login Fail";
}
}


可是,有没有很好奇,MVC生成的html中,没有定义规则的class,也没有生成相关的js来定义rules.甚至连调用验证的validate()方法都没有,它是如何触发验证的呢?