Хм, я не понимаю проблемы. Я загрузил и попробовал Ваш файл решения в качестве примера.
исключение выдается в TimeDefLexer.cs, строка 852, который впоследствии обрабатывается блоком выгоды в Program.cs, который просто говорит Обработанное исключение .
, Если я некомментирую блок выгоды выше его, он введет тот блок вместо этого.
, Что, кажется, проблема здесь?
Как упомянутый Kibbee, Visual Studio остановится на исключениях, но если Вы попросите, чтобы он продолжился, исключение будет поймано Вашим кодом.
О «может быть, 0 ошибок и IsValid == false»: вот исходный код MVC из https://github.com/Microsoft/referencesource/blob/master/System .Web / ModelBinding / ModelStateDictionary.cs # L37-L41
public bool IsValid {
get {
return Values.All(modelState => modelState.Errors.Count == 0);
}
}
Теперь похоже, что этого не может быть. Что ж, это для ASP.NET MVC v1.
Поскольку вы, вероятно, программируете в Visual Studio, вам лучше воспользоваться возможностью использования точек останова для таких простых шагов отладки (чтобы понять, в чем проблема, как в вашем случае). Просто разместите их прямо перед / в том месте, где вы проверяете ModelState.isValid, и наведите курсор на ModelState. Теперь вы можете легко просмотреть все значения внутри и увидеть, какая ошибка вызывает isvalid return false.
bool hasErrors = ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);
или итерация с
foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
{
}
Свойство ModelState в контроллере фактически является объектом ModelStateDictionary. Вы можете перебирать ключи в словаре и использовать метод IsValidField, чтобы проверить, действительно ли это конкретное поле.