Question

Le décrit ici semble maintenant être la par défaut pour ASP.NET MVC 2 (au moins pour taille 1).

Quand un modelbinding querystring comme ceci:

 ?Foo=&Bar=cat 

Ce qui suit liaison se produit (en supposant que vous lier à un modèle avec des propriétés de chaîne « Foo » et « Bar »)

ASP.NET MVC 1

 model.Foo = "";
 model.Bar = "cat":

ASP.NET MVC 2 (l 1 à RC)

 model.Foo = null;
 model.Bar = "cat":

Je voulais donner à quiconque qui joue avec V2 une tête puisque cela n'a pas été mentionné dans le « gu-notes . Aussi curieux si quelqu'un dans le savoir peut dire si oui ou non ce sera la mise en œuvre finale ou une fonction configurable? Je vais bien de toute façon, mais espère juste qu'ils ne revenir à l'ancienne! Être configurable serait encore mieux.

Modifier La leçon à tirer de ce point est tout version que vous développez contre ne pas écrire du code qui dit Foo.Length == 0 à tester pour une chaîne vide ou Foo.Length> 3 pour vérifier une longueur minimale. Utilisez String.IsNullOrEmpty (Foo) et / ou pour vérifier null premier.


Mise à jour: Cette question a suscité ma curiosité de savoir pourquoi ils réellement faire ce changement. Je pense que je suis tombé sur la réponse tout en recherchant des contrôles désactivés. La spécification HTML W3 définit un « contrôle avec succès » comme suit:

  

Un contrôle réussi est « valide » pour   soumission. Chaque contrôle réussi   a son nom de contrôle associé à son   valeur actuelle dans le cadre du soumis   ensemble de données de formulaire. Un contrôle réussi   doit être défini dans un élément FORM   et doit avoir un nom de contrôle.

En d'autres termes - un contrôle réussi est celui qui le fera au serveur en tant que paramètre de chaîne de requête. Maintenant, si un contrôle n'a pas une valeur valide, selon la spécification:

  

Si un contrôle ne dispose pas d'un valeur actuelle   lorsque le formulaire est soumis, l'utilisateur   les agents ne sont pas tenus de le traiter comme   un contrôle réussi.

(repérer le « ouvert à l'interprétation » langue ici « n'a pas à ... »)

Je pense en envoyant à la place une valeur nulle d'une chaîne vide, il réduit de navigateur où incompatibilités certains navigateurs peuvent envoyer Foo=&Bar= et d'autres peuvent même pas envoyer ce paramètre de chaîne de requête. En toujours interpréter Foo= comme si Foo était pas là à toutes les forces que vous soyez plus défensif.

Je pense que je suis au moins sur la bonne voie à la raison pour laquelle ici - et au moins en partie a quelque chose à voir avec la notion de « contrôle succcessful ».

http://www.w3.org /TR/html401/interact/forms.html#h-17.13.2

Était-ce utile?

La solution

Null est plus représentatif de ce qu'elle est en réalité, et il est compatible avec d'autres types nullables en dehors chaîne, donc j'imagine qu'il est par la conception.

Autres conseils

Je préfère le comportement de v1. Comment allez-vous être en mesure de passer une chaîne vide v2? En outre, ce dernier vous ne pouvez pas dire si foo est dans les paramètres de la requête ou non.

Une façon de configurer serait de remplacer le modèle de liaison par défaut dans la version 2 (ou V1) pour obtenir un comportement cohérent. Je préfère l'hypothèse nulle, moi-même.

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