NullReferenceException Problem mit ASP.NET MVC Textbox HtmlHelper

8

Ich habe den folgenden Code in einer stark typisierten Ansicht in meiner Anwendung:

%Vor%

Die Variable crit wird in ViewData übergeben und mithilfe der folgenden Anweisung in ein stark typisiertes Objekt in der Ansicht umgewandelt:

%Vor%

Die Eigenschaft TriageStartDate ist eine String-Eigenschaft, die für das Objekt wie folgt definiert ist:

%Vor%

Ich habe eine Validierungsroutine im Geschäftsobjekt, die diese Eigenschaft auf ungültige Daten überprüft. Die Validierungsroutine wird in meinem Controller aufgerufen, und in der Steuerung füge ich dem ModelState einen ModelError hinzu, wenn ein ungültiges Datum gefunden wird (zum Beispiel "4/34/2009"). Dies sollte dazu führen, dass die Ansicht erneut angezeigt wird und die Validierungszusammenfassung und -meldung ebenfalls angezeigt wird.

Der Code stürzt jedoch in der Zeile Html.TextBox mit einer unbehandelten NullReferenceException ab. Der Code only stürzt ab, wenn ungültige Daten eingegeben werden, was wahrscheinlich nicht von Bedeutung sein sollte, da die Eigenschaft ohnehin eine Zeichenfolge ist und nur das ungültige Datum in der Textbox angezeigt werden sollte.

Irgendwelche Ideen, was hier vor sich geht? Ich dachte, es könnte eine Html.Encode Sache sein, aber gültige Daten werden ohne viel Aufwand angezeigt. Wenn ich diese Zeile im Debug-Modus unterbricht, kann ich den Wert "4/34/2009" in der TriageStartDate-Eigenschaft sehen, und die crit-Variable selbst ist nicht null, also frage ich mich, welches Objekt NULL ist?

Übrigens sehen die ersten paar Zeilen des Stack-Trace so aus:

%Vor%

Hier ist mein Validierungscode (der möglicherweise nicht hübsch ist). Im Geschäftsobjekt:

%Vor%

In der Steuerung:

%Vor%

Danke für Hinweise!

Dank Craigs Vorschlägen habe ich den Controller-Code wie folgt aktualisiert, und die Null-Referenz-Ausnahme ist verschwunden. Die Lösung funktionierte, aber ich bin mir nicht sicher, ob ich die Gründe verstehe, da der Wert, den der Benutzer eingeben wollte, bereits im Modellobjekt gespeichert ist und ich andere Ansichten und Controller im Projekt habe, die Validierungsfehler auf die gleiche Weise anzeigen irgendwelche Probleme. Aber, hey, wenn es funktioniert ...

%Vor%     
Rich Miller 05.05.2009, 20:04
quelle

3 Antworten

9

Nachdem Sie AddModelError aufgerufen haben, müssen Sie SetModelValue aufrufen. Das sollte die Nullreferenz beheben.

    
Craig Stuntz 05.05.2009, 21:50
quelle
1

Ich stieß auf dieses Problem, als ich eine fast identische Frage / Problematik eintippte. (Das Rendering meiner Ansicht verursachte beispielsweise das Auslösen einer mysteriösen NullReferenceException, wenn der Wert des Benutzers die Validierung für ein bestimmtes Feld nicht bestanden hat.

Eine andere Problemumgehung, die ich gefunden habe, ist das explizite Erzeugen des Html in der Ansicht, anstatt es dem HtmlHelper zu überlassen.

Zum Beispiel: <%= Html.TextArea("FieldName", Model.FieldName) %> würde eine Ausnahme auslösen, aber <textarea id="FieldName" name="FieldName"><%= Model.FieldName ></textarea> würde perfekt funktionieren.

Danke, dass Sie die ursprüngliche Frage gepostet haben, da ich jetzt etwas mehr in SetModelValue schauen muss, um zu sehen, welcher der beiden Ansätze die bessere Lösung ist ...

    
Peter Bernier 30.05.2009 22:01
quelle
1

ein Link, den ich hilfreich fand, dies zu erklären Ссылка

    
sjors miltenburg 21.08.2009 10:57
quelle

Tags und Links