技术:c# .net 采用mvc框架,实现model的数据验证。
刚开始觉得数据验证很方便,可以判断非空、数据正确性,但是后来发现很多需要数据库的判定还是需要post请求做,但是就想mvc的数据验证是否可以做到同样的功能,示例如下。
一:Model 层调用Post 方法数据验证
using System.Web.Mvc;
//我用的是4.0000
/// <summary> /// 手机号 /// </summary> [Required(ErrorMessage = "手机号不能为空!")] [RegularExpression("[0-9]{11,11}", ErrorMessage = "手机号格式错误!")] [System.Web.Mvc.Remote("CheckGuestMobile", "CRM", "CommercialTenant", HttpMethod = "post", ErrorMessage = "手机号已存在")] public string Mobile { get; set; }
/// <summary> /// 判断客户手机号是否重复 /// </summary> /// <param name="mobile"></param> /// <returns>True 已有此手机号</returns> [HttpPost] public ActionResult CheckGuestMobile(string mobile) { if (this.CRMService.CheckGuestMobile(mobile, this.LoginInfo.CommercialTenantID)) { return Content("false"); } else { return Content("true"); } }
ps:这个只是前段验证,但是关键数据要在后端再做验证
这个post方法为false时不需要返还bool 可以直接返还ErrorMessage
public JsonResult CheckUserName(string userName) { if (IsUniqueName(userName) && IsForbiddenName(userName)) { return Json(true, JsonRequestBehavior.AllowGet); } else if (!IsUniqueName(userName)) { return Json("用户名不唯一!", JsonRequestBehavior.AllowGet); } else { return Json("用户名不包含违禁词!", JsonRequestBehavior.AllowGet); } }
二:基本方法
1、Required-必填选项,当提交的表单缺少该值就引发验证错误。
/// <summary> /// 姓名 /// </summary> [DisplayName("姓名")] [Required(ErrorMessage = "姓名不能为空!")] public string Name { get; set; }
2、StringLength
[StringLength(20)] //最大长度不超过20个字符
public string name { get; set; }
[StringLength(20,MinimumLength=3)] //最大长度不超过20个字符,最短不能低于3个字符
public string password { get; set; }
3、RegularExpression-正则表达式能够匹配的字符串,如果不能匹配,则报一个验证错误
[RegularExpression(@"^w+@[a-zA-Z_]+?.[a-zA-Z]{2,3}$", ErrorMessage = "请输入正确的电子邮箱地址!")]
public string email{ get; set; }
4、Range-用来指定数值类型值的最小值和最大值。
[Range(35,44)] //整型,最小35,最大44 [Range(typeof(decimal),"0.00","49.99")] //decimal类型
5、Remote-允许利用服务器端的回调函数执行客户端的验证逻辑。说白了就是支持AJAX验证。
细则如上所示
6、Compare-用于确保模板对象的两个对象拥有相同的值。
[Compare("要对比的属性名")] [Compare("Money")] public decimal price { get; set; }
以上特性需要 using System.ComponentModel.DataAnnotations;
同时需要注意Web.config里面的这两个选项是否设置为了true;
<add key="ClientValidationEnabled" value="true"/> <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
后面如果有好的方法再说。