J'utilise un objet qui correspond à tous les champs de mon formulaire. J'utilise ensuite la liaison par défaut pour renseigner l'objet dans mon action, comme celui-ci; mon divisionObj initialise toutes les valeurs de String.empty dans le constructeur. P> Le problème est que lorsque le classeur remplit le modèle à partir des données de formulaire publiées, toutes les données non publiées sont définies sur NULL dans l'objet, eventHough IIn initialisée l'objet pour contenir des chaînes vides. P > Y a-t-il un moyen de modifier cela afin que les données déposées soient une chaîne vide. p> p>
3 Réponses :
Vous pouvez toujours utiliser [lier (exclude = "PropertyName1, Name2, PropertyName3")]] code> Pour exclure certaines propriétés de la liaison: ModelBinders.Binders.DefaultBinder = new EmptyStringModelBinder();
C'est plus dynamique que ça. Mon utilisateur pourrait remplir le formulaire faux. Le point est que j'ai besoin que mon objet contienne string.empty si un champ était laissé vide.
Je ne peux que confirmer que je vois les mêmes résultats que vous. Vos options sont: p>
Un moyen est d'exclure les propriétés que Lukled expliquée. Mais cela conduira à la duplication du code et vous devrez le faire sur chaque action du contrôleur chaque fois que DivisionObj (ou toute autre catégorie de modèle que vous souhaitez décorer) apparaît comme paramètre d'action. Soo c'est un peu encombrant ... p>
Je suis actuellement en train de disposer de multiples problèmes avec diverses propriétés personnalisées, certaines qui doivent être instanciées dans les travaux, certaines qui nécessitent une valeur que connue uniquement au moment de l'exécution et d'autres personnes également spéciales. P>
J'ai déterminé que pour moi, il est préférable d'aller avec le classeur de modèle personnalisé et de faire la plupart de ces choses là-bas. P>
Vous dites donc que le classeur de modèle par défaut rendra une valeur de valeur d'objet NULL, si une valeur correspondante n'a pas été trouvée dans les données de poste, même si l'objet a été initialisé à String.empty?
Je l'ai essayé parce que j'avais du code à la main quand j'ai répondu à votre question et que cela a fonctionné comme vous l'épreuve. Mais je ne suis pas sûr à 100% si cela fonctionne toujours comme ça. Vous pouvez télécharger vous-même la source ASP.NET MVC et consulter les implémentations par défautValueProvider et par défautModelbinder et voir pour vous-même comment ils le font.
Il s'agit d'un comportement par défaut du défautModelbinder, plus spécifiquement le cadre de basenotation. convertystringtonull strong> est par défaut, défini sur true. Vous pouvez créer votre propre liant modèle et remplacer le classeur de modèle par défaut. ModelBinders.Binders.DefaultBinder = new EmptyStringModelBaseBinder();
BindingContext.Modelmetadata.Convertemptytringtonull code> est complètement ignoré dans MVC 4 et plus tard
Cette réponse a fonctionné pour MVC4 Thoough: Stackoverflow.com/a/19303470/56621
Vous aurez besoin de définir les propriétés sur les chaînes vides de votre action de contrôleur, de la gérer dans votre logique professionnelle ou de la couche d'accès aux données. Je suggérerais que c'était une fonction pour votre BL.