Frage

Das Verhalten hier beschrieben nun scheint zu sein, die Standard für ASP.NET MVC 2 (zumindest für die Vorschau 1).

Wenn modelbinding eine Abfragezeichenfolgeflag wie folgt aus:

 ?Foo=&Bar=cat 

Die folgende Bindung erfolgt (vorausgesetzt, Sie mit ‚Foo‘ zu einem Modell sind verbindlich und ‚Bar‘ string Eigenschaften)

ASP.NET MVC 1

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

ASP.NET MVC 2 (Vorschau 1 bis RC)

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

Wollte jemand geben, die mit V2, da dies ein Heads-up spielt in der ‚nicht erwähnt gu-notes ‘. Auch neugierig, wenn jemand in der wissen kann kommentieren, ob dies die endgültige Implementierung oder ein konfigurierbares Feature sein? Ich bin so oder so in Ordnung, aber nur hoffen, dass sie nicht auf die alte Art und Weise zurückschalten! wäre noch besser konfigurierbar ist.

Edit: Die Lehre aus diesem Punkt zu lernen, ist, was Version Sie entwickeln gegen keinen Code zu schreiben, die Foo.Length == 0 zu Test für einen leeren String oder Foo.Length sagt> 3 für eine Mindestdauer zu überprüfen. Verwenden Sie string.IsNullOrEmpty (Foo) und / oder erste für null überprüfen.


Update: Diese Frage löste meine Neugier, warum würden sie tatsächlich diese Änderung vornehmen. Ich denke, dass ich auf die Antwort gestolpert, während deaktiviert Kontrollen zu erforschen. Die W3 HTML-Spezifikation definiert eine ‚ erfolgreiche Kontrolle ‘wie folgt:

  

Eine erfolgreiche Steuerung „gültig“ ist für   Einreichung. Jede erfolgreiche Kontrolle   seine Steuer Namen haben, gepaart mit seinem   Stromwert als Teil des eingereichten   Formulardaten eingestellt. Eine erfolgreiche Steuerung   muß innerhalb eines FORM-Element definiert werden   und muss eine Steuer Namen haben.

Mit anderen Worten - eine erfolgreiche Kontrolle ist eine, die es zurück an den Server als Abfrage-String-Parameter machen. Nun, wenn eine Kontrolle keinen gültigen Wert dann entsprechend der Spezifikation:

  

Wenn ein Steuerelement nicht über ein aktuellen Wert   wenn das Formular abgeschickt wird, Benutzer   Mittel sind nicht zu behandeln es erforderlich, als   eine erfolgreiche Kontrolle.

(vor Ort die 'offen für Interpretation' Sprache hier mit 'nicht erforderlich ist ...')

So denke ich, durch einen Null statt einer leeren Zeichenfolge sendet es Browser Inkompatibilitäten reduziert, wenn bestimmte Browser Foo=&Bar= senden können und andere können nicht einmal, dass die Query-String-Parameter senden. Durch immer Interpretation Foo= als ob Foo auf allen Kräften war nicht da Sie defensiver sein.

Ich glaube, ich zumindest auf dem richtigen Weg bin nach dem Grunde, warum hier - und zumindest teilweise etwas mit dem Begriff einer ‚Zusprache Kontrolle‘ zu tun.

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

War es hilfreich?

Lösung

Null ist repräsentativer für was es tatsächlich ist, und es ist kompatibel mit anderen Nullable Types neben string, so stelle ich mir es ist von Entwurf.

Andere Tipps

Ich ziehe das Verhalten von v1. Wie werden Sie eine leere Zeichenfolge in v2 passieren können? Zusätzlich mit letzterem kann man nicht sagen, ob foo in den Abfrageparametern sind oder nicht.

Eine Möglichkeit wäre, zu konfigurieren, dass die Standardbinder Modell in V2 (oder V1) zu ersetzen konsistentes Verhalten zu bekommen. Ich ziehe die null, selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top