Valider une Date dans un format spécifique ASP.NET MVC 3

J'ai une propriété de type DateTime MyDate dans mon ViewModel. Je veux faire en sorte que l'utilisateur entre la Date de la partie dans une zone de texte dans un format spécifique (jj.mm.aaaa) et essayé les attributs suivants:

[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; }

L'action du contrôleur signature pour un HttpPost ressemble à ceci:

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

Dans le Rasoir vue, j'ai essayé les deux façons suivantes:

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

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

Il ne fonctionne pas comme je veux. Le résultat est:

  • La validation côté Client fonctionne comme prévu avec Html helpers
  • Côté serveur de validation échoue toujours pour les deux aides, même avec des dates valides comme "17.06.2011" qui passent à l'expression régulière. Le MyDate propriété est rempli correctement avec la date d'entrée en viewModel qui est passé à l'action. Il semble donc que le modèle de la liaison a été de travail.
  • La DisplayFormat attribut n'est respecté par EditorFor mais pas par TextBoxFor. TextBoxFor affiche "dd.mm.aaaa hh:mm:ss"

Questions:

  1. Puis-je appliquer un RegularExpressionAttribute tout sur une propriété qui n'est pas une string? Si elle est autorisée, comment est le reg ex évaluée pour un non-propriété de chaîne comme DateTime sur le côté serveur? C'est quelque chose comme MyDate.ToString() en comparaison avec le reg ex? (Il serait d'expliquer que la validation échoue parce que ToString retourne une chaîne de caractères, y compris la partie du temps qui ne passe pas à l'expression régulière.)

  2. Est le DisplayFormat attribut généralement seulement respectée par EditorFor et jamais par TextBoxFor?

  3. Comment puis-je faire un jour de validation de droite?

InformationsquelleAutor Slauma | 2011-06-17