zoukankan      html  css  js  c++  java
  • ASP.NET MVC里ModelState.IsValid总是true或者总是false

    model的属性

    如果不加验证相关的特性,ModelState.IsValid会永远为true

    如果加了验证相关的特性,不满足验证规则时,ModelState.IsValid为false.

    接收到参数属性类型与Model定义不符时,ModelState.IsValid也会为false.

    public class PersonModel
        {
            public string FirstName { get; set; }
    
            public string LastName { get; set; }
    
            public int Status { get; set; }
        }

    控制器代码:

    [HttpPost]
            public string ReceivePerson(PersonModel model)
            {
                if (!ModelState.IsValid)
                {
                    var msg = string.Empty;
                    foreach(var value in ModelState.Values)
                    {
                        if(value.Errors.Count>0)
                        {
                            foreach(var error in value.Errors)
                            {
                                msg = msg + error.ErrorMessage;
                            }
                        }
                    }
                    return msg;
                }
                else
                    return "成功";
            }
    
            public string Index()
            {
                return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            }

    当给Status传一个“*”时,ModelState.IsValid为false,错误信息为:值“*”对于 Status 无效。

     如果给某个Model的某个字段加上验证特性,比如LastName必需:

    public class PersonModel
        {
            public string FirstName { get; set; }
    
            [Required()]
            public string LastName { get; set; }
    
            public int Status { get; set; }
        }

    当LastName为空时,可以看到ModelState.IsValid为false,错误信息为:LastName 字段是必需的。

    现在可以知道ModelState.IsValid总是为false或总是为true了。

    以上来自:https://www.cnblogs.com/basterdaidai/p/6679849.html

    下面说说我遇到的情况

    同上,我也追踪到了两个字段不能为空,但是这两个字段却不在我的Model中......百思不得姐

    后来发现,附加属性也会被检测

    public class PersonModel
        {
            public string FirstName { get; set; }
    
            public string LastName { get; set; }
    
            public int Status { get; set; }
    
            public Dept dept { get; set; }//也会验证Model有效性
        }
  • 相关阅读:
    Postgresql
    Partitioning with PostgreSQL v11 (转发)
    Partitioning with PostgreSQL v11 (转发)
    What is Data Partitioning?(转发)(未完待续)
    How to use table partitioning to scale PostgreSQL(转发)
    PostgreSQL 创建分区表(转发)
    json vs jsonb
    性能不佳的多线程应用程序的常见模式(microsoft)
    提高.net程序性能和稳定性-CLR Profile(转发)
    检查c#代码内存泄露工具-CLR Profiler工具使用(转发)
  • 原文地址:https://www.cnblogs.com/djd66/p/15261033.html
Copyright © 2011-2022 走看看