Manipulation des valeurs non valides avec ModelBinder dans ASP.NET MVC 1.0
-
22-09-2019 - |
Question
tout d'abord un contexte :
J'ai une forme, où je republier certains objets qui sont matérialisés automatiquement en objets par CVM intégré ModelBinder:
<input type="hidden" name="myobj[0].Id" />
<input type="text" name="myobj[0].Hours" />
<input type="hidden" name="myobj[1].Id" />
<input type="text" name="myobj[1].Hours" />
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(IList<MyObject> myobj);
De plus. Je voudrais souligner que nous affichons à DTO (DataTransferObjects) que nous plus loin sur la carte de ligne dans les entités cadre de l'entité, de sorte que nous voudrions plutôt pas quoi que ce soit de changement sur ce DTO, sauf peut-être ajouter des attributs
Problème
Si un utilisateur entre une valeur non valide pour « Heures », disent « Fubar », le ModelBinder ne tentera pas naturellement de définir la « propriété-heures d'autonomie. Mais il est par défaut à 0, car il est un int et non une chaîne .
Cela provoque des difficultés pour me ofcourse, parce que maintenant je ne peux pas voir si l'utilisateur en fait entré 0, ou si cela a été causé par l'entrée non valide.
Depuis que je suis à l'aide d'un objet à l'entité roulés à la maison (Entity Framework) mappeur, nous ne pouvons pas changer le pied-impression de la « propriété-à heures d'autonomie int? . Je suis conscient que MVC a construit une validation, mais nous préférons ne pas mettre en œuvre que, puisque nous savons qu'il a été sauvagement attaqué et qu'il ya une nouvelle validation à venir dans ASP.NET MVC 2.0.
Solution?
Je dois être en mesure de signaler à l'utilisateur quel champ est incorrect, ce qui signifie que je dois en quelque sorte d'être en mesure d'attraper une exception (ou peut-être une autre solution ingénieuse?), Où je peux faire une certaine logique et post retour une nouvelle vue de l'utilisateur où je clarifier ce qu'ils ont fait à tort.
Mon idée actuelle. L'écriture d'un ModelBinder personnalisé
Que proposez-vous?
La solution
Cela provoque des difficultés pour me ofcourse, parce que maintenant je ne peux pas voir si l'utilisateur en fait entré 0, ou si cela a été causé par l'entrée non valide.
Oui, vous pouvez. Regardez dans le ModelState.
Autres conseils
Bien que ce ne soit pas particulièrement idéal, vous avez dit que vous ne voulez pas changer quoi que ce soit d'autre. Donc, l'option que vous avez mentionné, la création d'un ModelBinder personnalisé fonctionnera très bien. Cependant, vous pourriez vous retrouver la création d'un ModelBinder pour chaque entité que vous voulez lier.