Modèle MVC de validation pour la date
Est-il un défaut de validation pour MVC 5 où je peux mettre en valeurs min et max de la date?
Dans mon modèle, je veux la date de validation de
public class MyClass
{
[Required(ErrorMessage="Start date and time cannot be empty")]
//validate:Must be greater than current date
[DataType(DataType.DateTime)]
public DateTime StartDateTime { get; set; }
[Required(ErrorMessage="End date and time cannot be empty")]
//validate:must be greater than StartDate
[DataType(DataType.DateTime)]
public DateTime EndDateTime { get; set; }
}
Ps: d'Après ce Asp.Net Site Web, il y a un problème dans l'utilisation de la Range
programme de validation pour le type DateTime, et il n'est pas recommandé.
Remarque: jQuery de validation ne fonctionne pas avec la Gamme d'attributs et de
DateTime. Par exemple, le code suivant affichera toujours une
la validation côté client d'erreur, même lorsque la date est dans le
plage spécifiée:
[Range(typeof(DateTime), "1/1/1966", "1/1/2020")]
Vous devez désactiver le jQuery de validation date d'utilisation de la Gamme attribut DateTime. Il n'est généralement pas une bonne pratique pour compiler dur
les dates dans vos modèles, l'utilisation de la Gamme de l'attribut DateTime et est
découragés.
J'ai aussi, de savoir qu'il existe des packages Nuget comme Couramment Validation et Infaillible qui fait le tour de la validation et de la vérification si une date est plus grande que les autres, mais je voulais savoir si par défaut il y a quelque chose à vérifier la date de min et la valeur max.
De ce que j'ai vu dans Quoi de nouveau dans MVC 5.1, Il ya un soutien pour MaxLength
et MinLength
de validation.
stackoverflow.com/questions/40543473/... voir cette réponse
OriginalL'auteur Cybercop | 2014-02-14
Vous devez vous connecter pour publier un commentaire.
Il n'est pas nécessaire de désactiver jQuery de validation date (et qui est susceptible de causer d'autres problèmes). Vous avez juste besoin de remplacer la
range
méthode de la$.validator
.Par défaut, il fonctionne avec des valeurs numériques (et puis revient à une comparaison de chaîne), de sorte que vous pouvez ajouter le script suivant (après
jquery.validate.js
etjquery.validate.unobtrusive.js
, mais pas enveloppé dans$(document).ready
Ensuite, vous pouvez utiliser le
RangeAttribute
sur votre propriétéOriginalL'auteur
Je le ferais avec le
IValidatableObject
de l'interface du Système.ComponentModel.DataAnnotations, qui permet d'ajouter des règles de validation où vous pouvez faire beaucoup plus de vérification. Ajouter l'interface de votre classe, puis de mettre en œuvre laValidate
méthode, où vous pouvez comparer les StartDateTime à contre-courant de la date/de l'heure, et aussi de comparer les EndDateTime avec le StartDateTime, par exempleLe seule inconvénient c'est que
Validate
s'exécute côté serveur, pas en jQuery de validation.OriginalL'auteur PhilPursglove
Normalement, j'utilise cette solution quand je veux valider quelque chose dans le serveur.
Je sais que vous pouvez compter sur la Validation du Modèle MVC utilise, mais quand je fais les validations, je suis en train d'utiliser un projet distinct dans le cas où j'ai besoin de faire de test unitaire pour eux. Disons que vous avez deux applications, un Bureau et un Web, puis les deux peuvent partager le ValidationProject au lieu de répéter le code de l'application pour la même "Affichage"/"Écran". L'idée ici est d'isoler le Projet de Validation d'un projet indépendant de votre solution.
Ainsi, vous pouvez télécharger FluentValidation projet de NuGet, FluentValidation utilise des Règles à l'intérieur du constructeur, vous pouvez voir la documentation ici https://github.com/JeremySkinner/FluentValidation/wiki
Votre Date de règle peut être utilisée en ontario cette manière, par exemple, vous pouvez y mettre des règles pour les valeurs min et max en valeur aussi:
Maintenant à l'intérieur de votre contrôleur
OriginalL'auteur Zinov
Je pense que le simple ajout de l'attribut "Gamme" va travailler
"Note: jQuery validation does not work with the Range attribute and DateTime. For example, the following code will always display a client side validation error, even when the date is in the specified range: [Range(typeof(DateTime), "1/1/1966", "1/1/2020")] You will need to disable jQuery date validation to use the Range attribute with DateTime. It's generally not a good practice to compile hard dates in your models, so using the Range attribute and DateTime is discouraged."
OriginalL'auteur Paulo Lima