在开发MVC时,模型验证非常常见,平常我们用的应该都是全验证

if(ModelState.IsValid)
{
//验证成功要做的事
.....
}

但是有时候我们需要部分验证,比如修改用户信息时,因为更新用户时,并不是更新用户的所有信息,所以这时的模型也是不完整,也肯定不会通过验证。
这里有一个模型类,用作示例

public class User
{
[Required]
public int ID { get; set; }

[Required]
[StringLength(18,MinimumLength = 2,ErrorMessage = "名称字符长度在2-18之间")]
public string Name { get; set; }

[Required]
[Range(0,100,ErrorMessage = "年龄在0-100")]
public int Age { get; set; }
}

情况一:不验证的项相对较少
我们可以使用Remove方法

//不验证年龄项
ModelState.Remove("Age");

情况二:要做验证项相对较少
可惜的是,我查看了MSDN好像并没有找到,有关此功能的方法(如果大家找到了的话,请评论区留言= =)
所以目前写了扩展方法来实现该功能

/// <summary>
/// 验证实体模型中的部分属性
/// </summary>
/// <param name="ModelState"></param>
/// <param name="keys">要验证的属性List集合</param>
/// <returns></returns>
public static bool IsPartValid(this ModelStateDictionary ModelState,List<string> keys)
{
//遍历要验证部分属性
foreach (var item in keys)
{
//尝试获取对应键的值
//有不符合的模型属性 - Errors错误集合大于0
if (ModelState.TryGetValue(item,out ModelState modelState) && modelState.Errors.Count > 0)
return false;
}
return true;
}

然后直接使用,把要验证的存入一个集合就可以了

//验证模型中的部分属性
if (ModelState.IsPartValid(new List<string> { "Name", "Age" }))
{
//验证通过,要做的事
......
}

最新文章

  1. BZOJ 1121: [POI2008]激光发射器SZK
  2. 缓存大全(Memcached、redis、RabbitMQ )
  3. Sublime 将 Tab 转为空格
  4. Intel Edison 参考链接2
  5. Ubuntu 在右键快捷菜单中添加“Open in Terminal”
  6. Eclipse 整合cvs教程及遇到的问题
  7. IAR Embedded Workbench for ARM 6.50.6 &amp; 6.60.1 破解补丁
  8. HDU 1248 冰封王座(dp)
  9. 自定义控件之--继承控件(圆形TextView)
  10. JavaScript 定义 类
  11. 常用颜色RGB、灰度值
  12. goroutine的意义与实现
  13. CMake快速入门
  14. CentOS 7 yum安装nginx-1.12.0
  15. 6.适配器模式(Adapter Pattern)
  16. centos中创建自动备份Mysql脚本任务并定期删除过期备份
  17. jQuery插件实例五:手风琴效果[动画效果可配置版]
  18. 关于oracle数据库压力测试
  19. SSH登录到远程linux机器并执行命令
  20. LinkedList剖析

热门文章

  1. VBA-UTF-8文件的操作
  2. MSSQL sqlserver 统计&quot;一个字符串&quot;在&quot;另一个字符串&quot;中出现的次数的方法
  3. eclipse一直不停building workplace
  4. OHEM论文笔记
  5. 初始socket编程
  6. cf1012B
  7. fatal error LNK1169: one or more multiply defined symbols found
  8. C++文件读写demo
  9. Lucene搜索引擎入门
  10. JBPM4 学习笔记 转