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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top