Ich verwende ASP.NET MVC 3 RTM, und ich habe ein Ansichtsmodell wie folgt:
%Vor% Die Eigenschaft TimeOfDay
ist eine benutzerdefinierte Struktur, die ich habe, was ziemlich einfach ist, also schließe ich sie hier nicht ein. Ich habe ein benutzerdefiniertes Modell Bindemittel gemacht, um diese Struktur zu binden. Das Modellbinder ist ziemlich einfach:
Meine benutzerdefinierte Modellmappe funktioniert problemlos, aber das Problem liegt vor, wenn der vom Benutzer angegebene Wert nicht konvertiert oder analysiert werden konnte. Wenn das passiert (wenn der TimeOfDay-Konstruktor ein ArgumentException
auslöst), füge ich einen Modellfehler hinzu, der in der Ansicht korrekt angezeigt wird, aber der Wert, den der Benutzer eingegeben hat und der nicht konvertiert werden konnte, ist verloren. Das Textfeld, in das der Benutzer den Wert eingegeben hat, ist leer und in der HTML-Quelle ist das Attribut value auf eine leere Zeichenfolge gesetzt: "".
BEARBEITEN: Ich frage mich, ob es meine Editor-Vorlage ist, die etwas falsch macht, also füge ich sie hier ein:
%Vor%Wie stelle ich sicher, dass der Wert nicht verloren geht, wenn ein Bindungsfehler auftritt, damit der Benutzer den Wert korrigieren kann?
Aha! Ich habe endlich die Antwort gefunden! Dieser Blogpost gab die Antwort. Was ich vermisste, ist ModelState.SetModelValue()
in meinem Modellordner aufzurufen. Also wäre der Code wie folgt:
Ich hoffe, das rettet jemanden aus den Stunden der Frustration, die ich durchgemacht habe.
Tags und Links asp.net-mvc-3 c# custom-model-binder