gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:10:15 27 4
gpt4 key购买 nike

我有一个需要模型列表的操作。我想同时验证每个模型与整个模型集合。我正在尝试使用 TryValidateModel,但似乎如果我的任何一个模型无效,那么所有模型都无效。我的表单显示 5 个 SurveyResponseModel(一个包含两个必需字符串和两个整数的类)。如果我完整填写所有五个模型,我会得到下面的 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 的值来检查这一点(对于无效模型)。如果为 false,则意味着验证器是由模型绑定(bind)程序运行的,这就是我认为会发生的情况。

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

关于ASP.NET MVC3 TryValidateModel 验证整个模型集合,而不仅仅是单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com