Frage

Ich arbeite in einer ASP.NET MVC-Anwendung. Ich habe eine Ansicht Modell wie folgt:

public class SampleInterestViewModel
{
   //Properties defined
   //One such property that shows an error in ModelState is as follows
   public DateTime? SampleDate { get; set; }
}

Von UI Perspektive Benutzer kann Datum als mmddyyyy eingeben. Und wenn Benutzer gibt in einem solchen Format Mitsprache 01012001, mein ModelState.IsValid Code Stück in der Steuerung gibt false zurück. Wenn ich eine schnelle Uhr in Model tue, sehe ich einen Fehler für die propery „SampleDate“ und sagte: „Der Wert 01012001 für SampleDate nicht gültig ist“.

In meinem Modelbinder, während der OnModelUpdated Veranstaltung habe ich versucht, den Wert 01012001 zu 01/01/2001 zu formatieren und es zurück zu SampleInterestViewModel.SampleDate Denken zugewiesen, dass ModelState.IsValid ohne diesen Fehler true zurückgeben könnte. Aber noch ModelState.IsValid ist falsch und ich, wenn ich in dem Model Wörterbuch nachgeschlagen, diese besondere Eigenschaft hat immer noch, dass Fehler in seiner Sammlung.

Schließlich habe ich versucht, 01012001 zu formatieren und den Wert 01.01.2001 direkt zum Immobilien SampleDate im Model Wörterbuch aktualisieren. Aber nach wie vor ist ModelState.IsValid falsche Darstellung der gleiche Fehler für die SampleDate Eigenschaft. Kann nicht herausfinden, warum ModelState.IsValid funktioniert und wie und wann es auf false gesetzt wird.

Wenn der Benutzer 01012001 in der Benutzeroberfläche eingeben, ich muss noch in der Modelbinder zu 01/01/2001 zu formatieren und stellen Sie sicher, dass ModelState.IsValid es wahr, so dass der Rest meines Controller-Code kann wie erwartet. In der Benutzeroberfläche ich eine AjaxSubmit machte den sampleDate Wert zu stellen.

Alle Gedanken oder Kommentare.

War es hilfreich?

Lösung

Ich kann ein paar Lösungen finden Sie unter:

  1. Nachdem das Format in Ihrem Modell Binder Fixieren Sie die Model Fehler mit ModelState["SampleDate"].Errors.Clear(); löschen konnte.
  2. Verwenden Sie JavaScript, um die Eingabe zu bestätigen die Benutzer zu zwingen, das richtige Format einzugeben.
  3. Verwenden Sie JavaScript das Format für den Benutzer vor dem Form-Post zu ändern.

Ich denke, eine Kombination aus 1 und 2 ist die beste Wahl.

Andere Tipps

Versuchen Sie, in Ihrer Aktion eine weiße Liste von Parametern zu binden Verwendung mit

Bind(Include="param1,param2...")

Und in dieser Liste, ommit die Parameter, den Sie selbst sind verbindlich. Lesen Sie this ScottGu die Post für weitere Informationen.

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