加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET MVC3 TryValidateModel验证整个模型集合,而不仅仅是单个

发布时间:2020-12-16 07:27:23 所属栏目:asp.Net 来源:网络整理
导读:我有一个采取模型列表的动作.我想一次单独验证每个模型与整个模型集合.我正在尝试使用TryValidateModel,但似乎如果我的任何一个模型无效,则所有模型都无效.我的表单显示5个SurveyResponseModels(一个包含两个必需字符串和两个整数的类).如果我完全填写所有五
我有一个采取模型列表的动作.我想一次单独验证每个模型与整个模型集合.我正在尝试使用TryValidateModel,但似乎如果我的任何一个模型无效,则所有模型都无效.我的表单显示5个SurveyResponseModels(一个包含两个必需字符串和两个整数的类).如果我完全填写所有五个模型,我将获得validCount = 5.但是,如果五个模型中的任何一个不完整(因此验证失败),我得到的validCount为0. TryValidateModel的预期行为是什么?如果是这样,关于如何一次验证这些的任何想法?

[HttpPost]
    public ActionResult Create(IList<SurveyResponseModel> respondents)
    {
        int validCount = 0;

        foreach (SurveyResponseModel respondent in respondents)
        {
            if (TryValidateModel(respondent))
            {
                validCount++;
            }
        }
        ModelState.AddModelError("",validCount.ToString() + " respondents passed validation");
    }

解决方法

查看代码,在我看来,TryValidateModel将验证所提供对象给出的所有类型的模型,而不仅仅是该特定对象本身.此外,它返回ModelState.IsValid属性的当前值,以便一旦存在无效模型,TryValidateModel的所有调用都将返回false.如果你想做这样的事情,我认为你需要在特定的模型实例上自己获取并运行每个模型实例的验证器.

我还认为模型验证器已经在您手动调用它们时运行.您可以通过在循环之前查看ModelState.IsValid的值来检查此(对于无效模型).如果它是假的,则意味着验证器由模型绑定器运行,这就是我认为发生的情况.

您可以在http://aspnet.codeplex.com/找到MVC的源代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读