zoukankan      html  css  js  c++  java
  • ASP.NET 模型验证2--验证部分属性

    在开发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" }))
    {
    //验证通过,要做的事
    ......
    }

  • 相关阅读:
    .Net 框架培训
    根据 XSD生成 Data Contract之怪现象
    WCF performance
    IIS7 performance
    【原】[SQL function] SQL Server Split Function
    【原】[Data.Common.Format] 格式化传入的float(浮点型)字符串
    【原】[Crystal Reports] 当前一条记录与前一条记录比较
    【转】C#中处理XML文档的方法
    【原】Crystal Reports水晶报表 格式化传入的float字符串
    【转】[ASP] 用 ASP 创建 GUID
  • 原文地址:https://www.cnblogs.com/wfy680/p/12323387.html
Copyright © 2011-2022 走看看