Answers:
关于“可能是0错误和IsValid == false”:这是来自https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41的MVC源代码
public bool IsValid {
get {
return Values.All(modelState => modelState.Errors.Count == 0);
}
}
现在,看起来不可能。好吧,那是针对ASP.NET MVC v1的。
因为您可能正在Visual Studio中进行编程,所以最好利用使用断点的可能性来进行此类简单的调试步骤(了解您所遇到的问题所在)。只需将它们放在检查ModelState.isValid的位置的前面/上,然后将鼠标悬停在ModelState上。现在,您可以轻松浏览其中的所有值,看看是什么错误导致isvalid return false。
var asdf = ModelState.Values.Where(v => v.Errors.Count > 0);
可以帮助您
bool hasErrors = ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);
或与
foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
{
}
有时,活页夹将引发异常而没有错误消息。您可以使用以下代码段检索异常,以找出问题所在:
(通常,如果活页夹试图将字符串转换为复杂类型等)
if (!ModelState.IsValid)
{
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
// Breakpoint, Log or examine the list with Exceptions.
}
就像我刚发生的一样-当您向模型中添加必需的属性而不更新表单时,也会发生这种情况。在这种情况下,ValidationSummary将不会列出错误消息。