2010-09-18 8 views
0

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?

Répondre

1

La validation côté client passera car il n'y a pas d'élément d'entrée correspondant à valider, la validation côté serveur échouera car vous appliquez un champ à être requis et cette valeur de champ n'est pas publiée sur le serveur. Vous pouvez lire this blog post pour comprendre le fonctionnement de la validation du modèle et les différences entre la validation d'entrée et la validation du modèle.

+0

Merci. Voir ma question mise à jour, peut-être vous pouvez jeter un peu plus de lumière. Je vais aller lire ce post maintenant. –

+0

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. –

+0

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). –