• 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有效性
        }
  • 相关阅读:
    Autodesk Infrastructure Map Server 2012(MapGuide 2012)开发WebCast将于6月1日上午进行
    Autodesk Infrastructure Map Server(AIMS) 2012 常见错误
    Map 3D / MapGuide 连接 Oracle 找不到oci.dll?
    Mysql数据库监控要做好哪些?
    Centos删除目录下所有指定后缀或者包括指定字符的文件
    了解一下Mysql的MDL锁
    flash工具快捷键
    (转)AS3焦点事件
    (Matrix3D)坑爹的flash帮助文档
    (转)Flex编译参数
  • 原文地址:https://www.cnblogs.com/djd66/p/15261033.html
Copyright © 2020-2023  润新知