J'ai un ViewModel relativement complexe contenant les propriétés decimal
, qui sont exposées à l'utilisateur sous la forme de zones de texte. Je veux une zone de texte sans valeur à interpréter comme zéro. (Les propriétés de l'objet domaine sous-jacent sont non nulles et la valeur par défaut est 0.)ASP.NET MVC: Liaison de types numériques à partir de chaînes vides sans erreurs ModelState
Lorsque le DefaultModelBinder
lie les données d'affichage au ViewModel, les propriétés décimales avec des chaînes vides pour les entrées sont initialisées à zéro (comme standard dans .NET), mais le DefaultModelBinder
ajoute des erreurs au ModelState pour les zones de texte vides. Par conséquent, ModelState n'est pas valide et l'utilisateur voit tout un tas de "Une valeur est requise". erreurs pour les zones de texte qu'ils ont laissées en blanc.
Comment puis-je empêcher l'ajout de ces erreurs au ModelState?
J'utilise déjà un ViewModel comme objet de transfert de données - je vais éditer la question pour clarifier. Je devrais refactoriser beaucoup de code pour utiliser des nombres décimaux nullables cependant, et j'espérais éviter cela. –
Les ViewModels ne sont pas destinés à être utilisés dans plusieurs actions. Vous devriez avoir un nouveau ViewModel pour chaque Action qui nécessite des données uniques. En utilisant ViewModels génériques sur plusieurs actions, vous rencontrerez généralement des problèmes comme celui que vous rencontrez. –