2010-08-13 6 views
24

Je suis peut-être obsolète, mais un principe auquel j'adhère est d'éviter autant que possible les NULL.Comment définir la valeur par défaut de la chaîne vide TextBox au lieu de null

Cependant, ce que j'ai trouvé est que pour une vue fortement typée dans laquelle l'utilisateur entre les propriétés d'un objet que je veux enregistrer, si certains champs ne sont pas entrés, ils sont assignés comme null.

Ensuite, lorsque vous essayez d'enregistrer les modifications, la validation échoue.

Donc, plutôt que de définir chaque propriété à une chaîne vide, comment puis-je automatiquement définir chaque zone de texte sur un formulaire pour définir par défaut une chaîne vide plutôt qu'une valeur nulle?

+0

J'ai toujours trouvé en évitant nulls autant que possible une chose étrange . Null est une belle chose. Dans une ligne d'enregistrement de table de base de données a une colonne nullable et il est nul, cela signifie qu'aucune valeur n'a jamais été fournie auparavant. Cette connaissance est si importante pour les règles d'affaires et les logiques pour les entreprises que j'ai trouvées maintes et maintes fois. –

+0

Je peux voir que les valeurs nulles sont utiles lors du calcul d'une moyenne pour une plage de nombres. Aussi nul est bon pour les dates qui n'ont pas encore été saisies. Sinon, pourquoi un nul vaut mieux qu'une chaîne vide ou un zéro? Tout ce qu'il semble faire est de générer plus de code de plaque de chaudière pour arrêter les exceptions de référence nulle indésirables. – arame3333

+0

C'est un bon point, bien qu'au lieu de vérifier null à la plupart des mêmes endroits, pour éviter les exceptions de référence nulles indésirables, vous vérifiez si! EmptyString). Les exceptions de référence nulles sont anciennes, mais elles peuvent être un bon niveau de «contrôle/test de qualité». La chaîne vide passe, pas d'exception, mais elle ne devrait pas être vide, null déclenche une exception et donc un développeur découvre peut-être des bogues plus rapidement peut-être. Son drôle, je déteste voir les colonnes de chaînes vides dans Sql Sélectionnez les résultats lol –

Répondre

52

Vous pouvez mettre l'attribut suivant sur votre chaîne-propriétés dans votre modèle:

[DisplayFormat(ConvertEmptyStringToNull=false)] 

Donc chaque fois que quelqu'un affiche un formulaire vide texte des champs, ce sera une chaîne vide au lieu de null ...

+0

c'est ça, ce que je cherche. Thanx @Yngve B. Nilsen –

2

Pour être honnête, je dirais que votre méthode de codage est périmée et défectueuse. Vous devriez gérer toutes les possibilités, ce n'est pas difficile. C'est exactement ce que string.IsNullOrEmpty(value); est pour.

Je devine votre logique de validation est quelque chose comme:

if (value == string.Empty) { isValid = false; } 

Il ne gère pas les valeurs nulles. Vous devez remplacer cette vérification afin qu'elle vérifie également les valeurs NULL.

string value1 = null; 
string value2 = string.Empty; 

string.IsNullOrEmpty(value1); // true 
string.IsNullOrEmpty(value2); // true 
+0

Je peux voir ma question n'est pas claire. Je cherche une réponse à faire avec des métadonnées ou un modèle étendu. Ceci est une question MVC plutôt qu'une question C#. – arame3333

+0

Publiez du code dans votre question afin que nous puissions voir ce que vous voulez faire. – GenericTypeTea

+0

Je ne suis pas sûr du code que je peux vous montrer. J'ai quelques TextBoxes dans une vue, et si l'utilisateur n'entre pas une valeur avant de soumettre, ils par défaut à null. Si les champs du modèle sous-jacent ne sont pas NULL, cela provoque l'échec de la validation. J'ai trouvé une réponse basée sur cette question sur SO; http://stackoverflow.com/questions/1718501/asp-net-mvc-best-way-to-trim-strings-after-data-entry-should-i-create-a-custom Au lieu de couper je viens de Définir une chaîne vide à une chaîne vide. Je suis content de cette réponse, mais peut-être y en a-t-il une plus facile? – arame3333

1

J'ai rencontré ce problème en traitant un ancien service qui nécessite des chaînes vides. J'ai créé une méthode d'extension:

public static string GetValueOrDefault(this string str) 
     { 
      return str ?? String.Empty; 
     } 

Vous pouvez donc l'utiliser lorsque vous voulez vous assurer que toutes les chaînes qui sont nulles sont vides

yourString1.GetValueOrDefault(); 
yourString2.GetValueOrDefault(); 
Questions connexes