2010-08-13 6 views
24

Ich mag veraltet sein, aber ein Grundsatz, den ich befolge, ist es, Nullen so viel wie möglich zu vermeiden.Wie setze ich den Standardwert von TextBox leere Zeichenfolge anstelle von null

Was ich jedoch gefunden habe ist, dass für eine stark typisierte Ansicht, in der der Benutzer die Eigenschaften eines Objekts eingibt, die ich speichern möchte, wenn einige Felder nicht eingegeben werden, sie als Null zugewiesen werden.

Wenn Sie dann versuchen, die Änderungen zu speichern, schlägt die Validierung fehl.

Anstatt also jede Eigenschaft auf eine leere Zeichenfolge festzulegen, wie kann ich jede TextBox in einem Formular automatisch auf eine leere Zeichenfolge anstelle einer Null festlegen?

+0

ich immer nulls so viel wie möglich eine seltsame Sache gefunden haben, zu vermeiden . Null ist eine schöne Sache. In einer Datenbanktabellen-Datensatzzeile ist eine Nullwert-Spalte vorhanden, und sie ist null. Dies bedeutet, dass kein Wert wie zuvor angegeben wurde. Dieses Wissen ist so wichtig für Geschäftsregeln und Logiken für Unternehmen, die ich immer wieder gefunden habe. –

+0

Ich kann sehen, Nullen sind nützlich, wenn Sie einen Durchschnitt für eine Reihe von Zahlen berechnen. Auch null ist gut für Daten, die noch nicht eingegeben wurden. Warum ist eine Null also besser als eine leere Zeichenfolge oder eine Null? Alles, was es zu tun scheint, ist, mehr Kesselplattencode zu erzeugen, um unerwünschte Nullreferenzausnahmen zu stoppen. – arame3333

+0

Das ist ein guter Punkt, obwohl, anstatt an den meisten Stellen auf null zu prüfen, um unerwünschte NULL-Referenzausnahmen zu verhindern, Sie nach if! EmptyString suchen. Die Null-Referenz-Ausnahmen werden alt, aber sie können eine gute Stufe der "Qualitätskontrolle/-prüfung" darstellen. Leere Zeichenfolge wird übergeben, keine Ausnahme, aber sie sollte nicht leer sein, null löst eine Ausnahme aus, und daher entdeckt ein Entwickler möglicherweise Fehler schneller. Es ist lustig, ich hasse leere String-Spalten in Sql Ergebnisse anzeigen lol –

Antwort

52

Sie könnten das folgende Attribut auf String-Objekten in Ihrem Modell setzen:

[DisplayFormat(ConvertEmptyStringToNull=false)] 

Also, wenn jemand ein Formular mit leeren Textfeldern postet, werden diese eine leere Zeichenfolge statt null sein ...

+0

ist es das, wonach ich suche. Danke @ Yngve B. Nilsen –

2

Um ehrlich zu sein, würde ich sagen, dass Ihre Programmiermethodik veraltet und fehlerhaft ist. Du solltest mit allen Möglichkeiten umgehen, es ist nicht schwer. Genau das ist string.IsNullOrEmpty(value); für.

Ich bin Ihre Validierungslogik zu raten ist so etwas wie:

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

So ist es nicht die Null-Werte verarbeiten. Sie sollten diese Überprüfung ersetzen, damit auch Nullen überprüft werden.

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

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

Ich kann meine Frage nicht klar sehen. Ich bin auf der Suche nach einer Antwort mit Metadaten oder einer erweiterten Vorlage zu tun. Dies ist eine MVC-Frage und keine C# -Frage. – arame3333

+0

Geben Sie einen Code in Ihre Frage ein, damit wir sehen können, was Sie tun möchten. – GenericTypeTea

+0

Ich bin mir nicht sicher, welchen Code ich Ihnen zeigen kann. Ich habe einige TextBoxen in einer Ansicht, und wenn der Benutzer vor dem Senden keinen Wert eingibt, wird standardmäßig Null verwendet. Wenn die Felder im zugrunde liegenden Modell NICHT NULL-Werte enthalten können, führt dies dazu, dass die Validierung fehlschlägt. Ich habe eine Antwort auf diese Frage zu SO gefunden; http://stackoverflow.com/questions/1718501/asp-net-mvc-best-way-to-trim-strings-after-data-entry-should-i-create-a-custom Anstatt nur zu trimmen Setzen Sie eine leere Zeichenfolge auf eine leere Zeichenfolge. Ich bin glücklich mit dieser Antwort, aber vielleicht gibt es eine leichtere? – arame3333

1

Ich habe dieses Problem beim Umgang mit einem alten Dienst, der leere Zeichenfolgen benötigt, gefunden. Ich habe eine Erweiterungsmethode:

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

So können Sie diese verwenden, wenn Sie sicher, dass alle Strings machen wollen, die null leer geworden sind

yourString1.GetValueOrDefault(); 
yourString2.GetValueOrDefault(); 
Verwandte Themen