Dove posso trovare l'elenco degli errori di cui rende il ModelState invalido? Non ho visto alcuna proprietà di errore sull'oggetto ModelState.ModelState.IsValid == false, perché?
risposta
Chi "può essere che 0 errori e IsValid == false": ecco il codice sorgente MVC da 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);
}
}
Ora, sembra che non può essere. Bene, questo è per ASP.NET MVC v1.
La proprietà ModelState sul controller è in realtà un oggetto ModelStateDictionary. È possibile scorrere le chiavi sul dizionario e utilizzare il metodo IsValidField per verificare se quel particolare campo è valido.
bool hasErrors = ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);
o iterare con
foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
{
}
potrebbe essere possibile che tutti i valori abbiano 0 errori e lo stato del modello non sia ancora valido? – Omu
Il modelstate avrà una chiave "Proprietà" e un errore associato nel dizionario. il messaggio di errore potrebbe essere vuoto, ma il conteggio degli errori rifletterà il conteggio delle proprietà non valido. Poiché il metodo ModelStateDictionary.AddModelError accetta una chiave e un'eccezione o una stringa di errore; è necessario aggiungere un errore del modello. –
Come probabilmente stai programmando in Visual Studio è meglio sfruttare la possibilità di utilizzare i punti di interruzione per tali operazioni di debug semplici (ottenere un idea di quello che è il problema come nel tuo caso). Basta posizionarli di fronte/nel luogo in cui si controlla ModelState.isValid e si passa con il mouse su ModelState. Ora puoi facilmente sfogliare tutti i valori all'interno e vedere quale errore causa false restituzioni false.
A volte un raccoglitore genera un'eccezione senza messaggi di errore. È possibile recuperare l'eccezione con il seguente frammento di scoprire che cosa è sbagliato:
(Spesso se il legante sta cercando di convertire le stringhe di tipi complessi, ecc)
if (!ModelState.IsValid)
{
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
// Breakpoint, Log or examine the list with Exceptions.
}
Questo codice è stato molto utile per me, ma iterando gli errori (Eccezioni) per ottenere ogni .Message ha comportato il "riferimento dell'oggetto non impostato su un'istanza di un oggetto". Quando ho cambiato z.Exception to z.ErrorMessage, sono riuscito a visualizzare i messaggi di errore. – StackOverflowUser
Come è appena successo a me - questo può accadere anche quando aggiungi una proprietà richiesta al tuo modello senza aggiornare il modulo. In questo caso ValidationSummary non elencherà il messaggio di errore.
Incollare il codice seguente in ActionResult del controller e posizionare il debugger a questo punto.
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
- 1. Perché False == False in [False] restituisce True?
- 2. Cosa fa ModelState.IsValid?
- 3. Imposta manualmente ModelState.isValid dal controller
- 4. Perché 0 == [], ma 0 == false e! [] == false?
- 5. Perché {} == false valutare su false while [] == false restituisce true?
- 6. Perché String.Equals restituisce false?
- 7. ModelState.IsValid vs IValidateableObject in MVC3
- 8. È possibile aggiornare ModelState.IsValid manualmente?
- 9. ASP.MVC3 ModelState.IsValid non include RemoteAttribute controllo
- 10. Perché Integer.respond_to? (: Even?) Restituisce false?
- 11. Perché bool (xml.etree.ElementTree.Element) restituisce False?
- 12. Perché contare (false) restituire 1?
- 13. Perché ValidateInput (False) non funziona?
- 14. Perché (null == false) e (null == true) entrambi restituiscono false?
- 15. Perché "[] == False" restituisce False quando "se non []" ha esito positivo?
- 16. ModelState.IsValid anche quando non dovrebbe essere?
- 17. MVC 4. ModelState.IsValid restituisce sempre true
- 18. ModelState.IsValid non esclude la proprietà richiesta
- 19. Perché chiamare dispose (false) nel distruttore?
- 20. Perché QFile :: canReadLine() restituisce sempre false?
- 21. Perché è consentito "const true = false"?
- 22. Perché "one" <2 ... FALSE in R?
- 23. Perché questa istruzione IF restituisce false?
- 24. 1 == 0 in (0,1) è False; perché?
- 25. Perché [] === [] (e altri) restituiscono false in javascript?
- 26. Perché "n & 1 == 0" restituisce sempre false?
- 27. Perché dovrei specificare @Column (nullable = false)?
- 28. JSF: Perché prependId = false in un modulo?
- 29. Perché `$ (document) === $ (document)` restituisce false in jQuery?
- 30. Perché double.TryParse ("0,0000", out doubleValue) restituisce false?
mi sembra che non dovrebbe, è qualcosa di sbagliato in Values.All (modelState => modelState.Errors.Count == 0)? – Omu
Si noti che l'errore può essere Messaggio o Eccezione; ad esempio Html.ValidationSummary non visualizza eccezioni (per motivi di sicurezza, immagino); forse è per questo che non vedi errori? Come si controllano gli errori? – queen3
ModelState.IsValid dà false – Omu