首先说一下Model中[DataType(DataType.Password)]的作用,它表示在我们使用@Html.EditorForModel()时生成密码筐,其他的DataType一样。
如果要用Vs自带的验证提示须引用
"~/Script/jquery.unobtrusive*"
"~/Script/jquery.validate*" //其中*表示所有以其前面部份开头的文件
1.非空验证 [Required]
[Required] [Display(Name="用户名")] public string UserName { get; set; }
View中的代码
@Html.LabelFor(m=>m.UserName) @Html.TextBoxFor(m=>m.UserName) @Html.ValidationMessageFor(m=>m.UserName)
在Controller中须通过验证才做处理,所以要判断其是否通过了验证
if (ModelState.IsValid) // 表示通过了验证 { // 其他处理 }
2.字符串长度验证: StringLength
不超过6个字符:[StringLength(6)]
6~12个符: [StringLength(12,MinimumLength=6)]
Model中
[Required] [StringLength(12,MinimumLength=6)] [Display(Name="用户名")] public string UserName { get; set; }
View中
@Html.LabelFor(m=>m.UserName)
@Html.TextBoxFor(m=>m.UserName)
@Html.ValidationMessageFor(m=>m.UserName)
在Controller中须通过验证才做处理,所以要判断其是否通过了验证
if (ModelState.IsValid) // 表示通过了验证
{
// 其他处理
}
3.正则表达式验证:RegularExpression()
如下:用户名只能是6-12个字母或数字
Model中(错误提示信息可以ErrorMessage="{0}不合法")
[Required] [RegularExpression(@"^[a-zA-Z0-9]{6,12}$")] [Display(Name="用户名")] public string UserName { get; set; }
View中
@Html.LabelFor(m=>m.UserName) @Html.TextBoxFor(m=>m.UserName) @Html.ValidationMessageFor(m=>m.UserName)
Controller中
if (ModelState.IsValid) // 表示通过了验证
{
// 其他处理
}
4.范围验证:[Range(1,100)]
[Required] [Range(1,100)] // 范围验证1到100 public int MyRange { get; set; }
Range验时间及类型:
[Range(typeof(DateTime),"1/1/1900","1/1/2200",ErrorMessage=".....")]
[Range(typeof(bool), "true", "true", ErrorMessage = "You must accept the terms")]
5.两次密码码证:[Compare(“要匹配的字段名(也就是第一次密码的字段名)”)]
[Required] [DataType(DataType.Password)] [StringLength(30,ErrorMessage="密码须16-30个字符",MinimumLength=16)] public string password { get; set; } [Required] [DataType(DataType.Password)] [Compare("password",ErrorMessage="两次密码不一匹配")] public string password2 { get; set; }
6.通过[Remote("Action","Controller")]在后台某个Controller下的某个Action下验证
如:验证用户名在数据库中是否存在
[Required] [RegularExpression(@"^[a-zA-Z0-9]{6,12}$")] [Display(Name="用户名")] [Remote("ValiUserName","Account")] //要添加using System.Web.Mvc引用 public string UserName { get; set; }
在控制器 AccountController 的代码如下
// 意要验证的属性名称要与下面的参数的名字相同,如要验证UserName这个属性,则下面的参数名也为UserName public JsonResult ValiUserName(string UserName) { var result=GetDataNotHasUserName(UserName); // 右边这个方法返回bool,用于判断数据库中是否不存在传过来的UserName return Json(result,JsonRequestBehavior.AllowGet); }
6.自定义验证:XXXAttribute :ValidationAttribute 须实现ValidationAttribute接口
首先得定义一个类XXXAttribute:ValidationAttribute接口(using System.ComponentModel.DataAnnotations;)代码如下
using System.ComponentModel.DataAnnotations; namespace MvcApplication1 { public class MaxLengthAttribute:ValidationAttribute { private int max = 1; public MaxLengthAttribute(int maxlenth) { max = maxlenth; } /// <summary> /// 重写 IsValid方法 /// </summary> /// <param name="value">要验证的字断值</param> /// <param name="validationContext">执行验证的上下文</param> /// <returns></returns> protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value.ToString().Length > max) { return new ValidationResult(validationContext.DisplayName + "过长,须在" + max.ToString() + "个字符以内"); } else { return ValidationResult.Success; } } } }
Model中的代码:只须取XXxAttribute前的XXx并加参数就可以了(如果没参就不写)
[Required] [MaxLength(12)] public string UserName { get; set; }