Validiert ein Datum in einem bestimmten format in ASP.NET MVC-3

Habe ich eine Eigenschaft vom Typ DateTime MyDate in meinem ViewModel. Ich möchte sicherstellen, dass die Benutzer nur die Daten eingibt Teil in einem text-Feld in einem bestimmten format (dd.mm.yyyy) und versucht die folgenden Attribute:

[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode=true)]
[RegularExpression(@"^(([0-2]\d|[3][0-1])\.([0]\d|[1][0-2])\.[2][0]\d{2})$",
    ErrorMessage="Failed...")]
public DateTime MyDate { get; set; }

Den controller-action-Signatur für eine HttpPost sieht wie folgt aus:

[HttpPost]
public ActionResult Edit(int id, MyViewModel viewModel)
{
    //MyViewModel contains the MyDate property ...
    //...
    if (ModelState.IsValid)
    {
        //...
    }
    //...
}

In der Razor-Ansicht-ich habe versucht, die folgenden zwei Möglichkeiten:

  1. @Html.TextBoxFor(model => model.MyDate)
  2. @Html.EditorFor(model => model.MyDate)

Funktioniert es nicht so wie ich will. Das Ergebnis ist:

  • Die clientseitige Validierung funktioniert wie erwartet mit Html-Helfer
  • Server-seitige Validierung schlägt immer fehl, für die beide Helfer, auch mit gültigen Datumsangaben wie "17.06.2011" welche durch den regulären Ausdruck. Die MyDate Eigenschaft ist korrekt gefüllt, die mit dem angegebenen Datum in viewModel zur übergabe an die Aktion. Es scheint also, dass Modell-Bindung tätig war.
  • Die DisplayFormat Attribut wird nur beachtet, durch EditorFor aber nicht durch TextBoxFor. TextBoxFor zeigt "dd.mm.yyyy hh:mm:ss"

Fragen:

  1. Kann ich mich bewerben, eine RegularExpressionAttribute auf eine Eigenschaft, die nicht eine string? Wenn es erlaubt ist, wie ist die reg ex-ausgewertet für einen nicht-string-Eigenschaft, wie DateTime auf der server-Seite? Ist so etwas wie MyDate.ToString() im Vergleich mit den reg-ex? (Es würde erklären, dass die Validierung fehlschlägt, weil ToString liefert eine string darunter den Teil der Zeit, die nicht vergehen der reguläre Ausdruck.)
  2. Ist die DisplayFormat Attribut in der Regel nur gewahrt durch EditorFor und nie von TextBoxFor?
  3. Wie kann ich ein Datum überprüfung richtig?

InformationsquelleAutor Slauma | 2011-06-17

Schreibe einen Kommentar