J'utilise MVC 2. J'ai une question concernant la validation côté client et côté serveur. Disons que j'ai une classe, et il dispose de 3 propriétés en tant que tel:Comprendre la validation côté client et serveur à l'aide d'annotations de données
[Required(ErrorMessage = "Required")]
public object Property1 { get; set; }
[Required(ErrorMessage = "Required")]
public object Property2 { get; set; }
[Required(ErrorMessage = "Required")]
public object Property3 { get; set; }
Sur mon avis, j'ai seulement Propriété1 et de la propriété 2 et les zones de texte. Je n'ai pas ajouté Property3 à la vue (mais il est marqué comme requis ci-dessus). Si je ne tape rien dans les zones de texte, la validation côté client échouera. Si j'insère du texte dans les zones de texte, le côté client passera-t-il même si Property3 n'a pas été défini avec une valeur? Va-t-il alors échouer du côté du serveur?
Le problème que j'ai est sur le côté serveur après avoir cliqué sur le bouton soumettre. Voici mon code pour mon action Créer:
public ActionResult CreateApplication(Application application)
{
try
{
application.ApplicationStateID = 1;
application.SubmitterEmployeeNumber = "123456";
if (ModelState.IsValid)
{
// Code here
}
}
catch
{
}
}
ApplicationStateID et SubmitterEmployeeNumber n'est pas mis sur le côté client (ils sont tous deux marqués comme requis), donc je l'ai mis ici. Après les avoir définis, pourquoi la validation échouerait-elle encore du côté du serveur?
Merci. Voir ma question mise à jour, peut-être vous pouvez jeter un peu plus de lumière. Je vais aller lire ce post maintenant. –
La raison en est que la validation est effectuée pendant la liaison du modèle. Vous définissez les propriétés requises ** après ** cette liaison de modèle se produit. Une solution de contournement possible consiste à utiliser la méthode 'TryUpdateModel' au lieu de le passer en argument d'action. –
Merci pour ce Darin. Juste une dernière question, est-ce que je fais cela correctement en mettant tout dans un essai et attraper? Normalement dans les formulaires web je vais vérifier si l'application est nulle comme si (application == null). –