博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC学习系列——Model验证扩展
阅读量:5259 次
发布时间:2019-06-14

本文共 3747 字,大约阅读时间需要 12 分钟。

     MVC中,实现了前端后端的验证。

前端验证。步骤:

web.config这两个得开启:

JS设置

第一步:引入页面js

@Scripts.Render("~/bundles/jqueryval")

第二步:BundleConfig类,得有

1  bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(2                         "~/Scripts/jquery.validate*"));

也就是这三个js

前端验证,在MVC中的实现:

在Model上面加一些特性,都在System.ComponentModel.DataAnnotations中,比如Required  range等。

MVC中的HtmlHelp会分析这些特性,加载一下data-XX.

比如:

1   [Required]2   public string Gender { get; set; }
1  @Html.EditorFor(x => x.Gender)

生成的html

1 

然后根据相关JS自动实现前端验证。

服务器端验证:

 在mvc中的实现:在Model上面加一些特性,都在System.ComponentModel.DataAnnotations中,比如Required  range等。

1  [HttpPost] 2         public ActionResult CreateStudent(StudentViewModel model) 3         { 4  5             ModelState.AddModelError("A", "AAAAA"); 6             ModelState.AddModelError("B", "BBBBB"); 7             ModelState.AddModelError("C", "CCCCC"); 8             ModelState.AddModelError("D", "DDDDD"); 9 10             return View();11         }

在ModelBinder过程中,开启了服务器端的验证。同时把验证不通过信息以键值对的方式,传值给ModelState中

错误信息的呈现: 

@Html.ValidationSummary(false)

是否隐藏错误信息:false即不隐藏错误信息,true即隐藏错误信息

1 @Html.ValidationMessageFor(x => x.Name)2 @Html.ValidationMessage("Name")

第一个是lamda表达式,第二个是一般形式,作用是一样的。

都是呈现对应错误的(根据key,呈现对应的value)

 

 

自定义ValidationAttribut(仅针对服务器端的验证) 

1:针对一个属性 

新建类MyValidationAttribute,继承ValidationAttribute

1  public class MyValidationAttribute : ValidationAttribute 2     { 3         public MyValidationAttribute() 4         { 5             ErrorMessage = "The Name Must be Zhangsan"; 6         } 7         public override bool IsValid(object value) 8         { 9             if (value==null)10             {11                 return false;12             }13             string result = value.ToString();14             //判断是否有值15             if (string.IsNullOrEmpty(result))16             {17                 return false;18             }19 20             if (result=="Zhangsan")21             {22                 return true;23             }24 25             return false;26         }27     }

应用:

1 public class StudentViewModel2     {3         public string ID { get; set; }4         [MyValidationAttribute]5         public string Name { get; set; }6         [Required]7         public string Gender { get; set; }8     }

View:

1 
2 @using (Html.BeginForm()) 3 { 4 @Html.ValidationSummary(false) 5
6
UserInfo 7
8 @Html.LabelFor(x => x.Name) 9
10
11 @Html.EditorFor(x => x.Name)12 @Html.ValidationMessageFor(x => x.Name)13 @Html.ValidationMessage("Name")14
15 16
17 @Html.LabelFor(x => x.Gender)18
19
20 @Html.EditorFor(x => x.Gender)21 @Html.ValidationMessageFor(x => x.Gender)22
23
24
25 }26

效果:

2:复杂的业务逻辑

类StudentViewModel继承接口 IValidatableObject

public class StudentViewModel: IValidatableObject    {        public string ID { get; set; }        [MyValidationAttribute]        public string Name { get; set; }        [Required]        public string Gender { get; set; }        public IEnumerable
Validate(ValidationContext validationContext) { if (!string.IsNullOrEmpty(Name)) { if (Name=="Zhangsan" && Gender=="Nan") { yield return new ValidationResult("Zhangsan and Gender is Nan,Which is wrong!"); } } } }

效果图:

源码:  http://pan.baidu.com/s/1pKDMgDd

转载于:https://www.cnblogs.com/xuliang1992/p/5329487.html

你可能感兴趣的文章
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
Ubuntu下面安装eclipse for c++
查看>>
让IE浏览器支持CSS3圆角属性的方法
查看>>
巡风源码阅读与分析---nascan.py
查看>>
LiveBinding应用 dataBind 数据绑定
查看>>
Linux重定向: > 和 &> 区别
查看>>
nginx修改内核参数
查看>>
C 筛选法找素数
查看>>
TCP为什么需要3次握手与4次挥手(转载)
查看>>
IOC容器
查看>>
Windows 2003全面优化
查看>>
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
web_day4_css_宽度
查看>>