8
votes

Validation du côté client MVC2 pour une date d'heure?

Quelle approche recommandez-vous de valider une heureTetime sur le côté du client dans MVC?

Disons que j'ai un modèle avec une propriété nommée Datefbirth c'est un DateTime , comme. xxx

sur la vue, j'ai un simple xxx

i peut utiliser Microsoft MVC validations ou les validations de jQuery. Comment puis-je obtenir la dateTime pour valider le côté client?

Je réalise que tout le DatatyTyTretribute est fourni des conseils de formatage et ne fait pas vraiment de validation (cela laisse cette pièce à la modélisation).

Fondamentalement, je veux dupliquer ce que le modèle de modèle fait lorsqu'il essaie de mettre la valeur postée dans la propriété Datefbirth du modèle.

Quelles sont vos recommandations?


1 commentaires

Préventivement: Oui, j'ai vu, lire et aimer le message de Phil Haack sur la validation personnalisée. HAACACKED.COM/Archive/2009/11/19/... < / a>


4 Réponses :


0
votes

Je suis contre le même problème et je ne peux pas trouver une solution. Je ne peux pas croire que tout le monde n'a pas couru dans cette question. J'utilisais le module jquery.maskedinput.js et cela a fonctionné super, mais quand j'ai commencé à ajouter le "[DataType (DataType (DataType (DataType.date)]" Décoration avec "Editeur" Si attribue l'entrée DateTime une classe de classe = "Text-Box une seule ligne". Ajouter cette classe enfreint le JS masqué. Il formule également mes dates inférieures comme "2/3/1010" qui souffle alors mon masque de jQuery de "99/99/9999".


0 commentaires

4
votes

Comme suggéré ci-dessus, suivez la publication de Phil Haack sur des validations personnalisées: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Voici comment je le ferais:


  1. Ajouter une classe "DateFormaTaTatribute", comme: xxx
    1. Ajouter une classe "DateFormatvalidator", comme: xxx
      1. enregistrer les classes ci-dessus quelque part dans global.aSax.cs: xxx
        1. ajoutez une fonction de validation sur le client. Notez que cela devra être mis en œuvre attribuer le paramètre local de l'utilisateur. Ce qui suit est une fonction de validation du côté client néerlandais (NL-NL, NL-BE): xxx

          qui devrait couvrir les choses ...


2 commentaires

Je n'ai pas encore essayé ça, mais ça a l'air bien. Question: Étant donné que le nouvel attribut n'ajoute rien que l'attribut DataType (DataType.Date) ne soit pas déjà sur le côté du serveur, est-il possible de prolonger cet attribut?


Enfin eu le temps d'essayer ceci. J'ai sauté le validationAttribute et je viens de faire un DataTypevalidator: DataNannotationsModelvalidator classe. J'ai utilisé un commutateur dans GetCliverValidationRules pour modifier la règle en fonction du type de données. Travaillé comme un charme! Merci pour ton aide!



1
votes

Josh,

Votre problème est un problème très courant dans le MVC, qui est que le modèle modèle tente de lier les valeurs entrées du formulaire dans le modèle. Évidemment, si cela ne convient pas, vous obtiendrez immédiatement une erreur. P>

Alors, comment puis-je utiliser la modélisation d'utiliser ma validation personnalisée? et retourner mon message d'erreur? P>

Eh bien, d'abord lisez et faites les choses écrites par Phil Haack. Ensuite, vous avez votre validation personnalisée. P>

La prochaine chose est. N'utilisez pas les entiers et les denttimes dans votre modèle! Si l'utilisateur peut saisir ce qu'il veut dans une zone de texte, cela donnera toujours des problèmes. P>

Ce que vous devriez faire est, faites un point plat de votre objet. P>

Un FlatObject est assez simple. C'est un objet, une copie exacte des variables à l'intérieur, uniquement, l'inst et les denttimes sont des chaînes (celles qui se lient toujours dans la modélisation) p>

exemple: P>

namespace MVC2_NASTEST.Models {

    public partial class FlatNieuw {
        public int Niw_ID { get; set; }
        public string Niw_Datum { get; set; }
        public string Niw_Titel { get; set; }
        public string Niw_Bericht { get; set; }
        public int Niw_Schooljaar { get; set; }
        public bool Niw_Publiceren { get; set; }
    }
}


0 commentaires

0
votes

Selon mon expérience, parfois, les validations Microsoft MVC ou les validations de JQuery sont un surlu pour certains projets que nous développons. C'est pourquoi parfois, je code / attrape des petits par moi-même.

Solution One: Plugin personnalisé (vous pouvez le modifier dans la manière dont vous vous convient) xxx

à votre vue:

  1. Ajouter une classe = 'date' à votre entrée BOÎTE
  2. appelez le plugin $ ("# yournput"). AlidateInput ();

    Solution 2: Utilisez JQuery UI Date Pick (la solution que j'utilise maintenant) xxx

    Plus de détails sur la solution 2 : http://www.gregshackles.com/2010/03/templed-helpers-and-custom-model-binders-in-asp-net-mvc-2/


0 commentaires