2011-04-28 7 views
1

Je suis en train de créer un formulaire de recherche pour mon application Web en utilisant MVC3. Ma forme est fondamentalement divisée en deux sections. 1st Section a 3 critères de recherche. Prénom, Nom et Code postal et sous cette section il y a un bouton "Rechercher" sur lequel je peux cliquer et il devrait faire une validation côté client et me donner un message d'erreur si l'un des champs est vide.Validation côté client ASP.NET MVC3

La 2ème section sur la même page a une seule zone de texte - pour rechercher par "Numéro de devis". Donc, cette section a une zone de texte pour entrer le numéro de citation et en dessous il y a un autre bouton appelé "Recherche". Lorsque je clique sur ce bouton de recherche, il devrait seulement valider que le champ Numéro de devis n'est pas vide.

J'ai un viewmodel qui a toutes les 4 propriétés (FName, LName, Zip, numéro de citation) et je lie sur la page. Le bouton affichera à la fois la page (je sais qu'il existe un moyen d'identifier le bouton qui a été cliqué sur la publication). Le problème auquel je suis confronté est en postback tout ce qui est posté et si j'utilise datannotations à faire RequiredField vérifier, il fait la validation sur tous les 4 champs mais je devrais vérifier pour quel bouton est cliqué et basé sur cette seule validation incendie sur 3 champs ou seulement sur 1 champs. Comment puis-je réaliser cette fonctionnalité? J'espère avoir clairement expliqué le problème.

Merci

Répondre

1

Depuis c'est MVC, ne pense pas que de ces postbacks, pensez à eux fait valoir. Comme ils sont à la recherche de différents critères, ils devraient vraiment être deux formes différentes soumettant à deux actions différentes. Comme ce sont des actions séparées, chacune peut avoir sa propre vue avec son propre ViewModel et sa propre validation. Ensuite, pour les combiner en une seule page physique à présenter à l'utilisateur, utilisez simplement le rendu partiel pour les placer dans la même vue.

Fondamentalement, la vue que vous présentez à l'utilisateur aurait quelque chose comme:

@{ 
    Html.RenderAction("SearchByName"); 
} 
<!-- maybe some markup to visually separate them --> 
@{ 
    Html.RenderAction("SearchByQuote"); 
} 

vous donne également l'avantage d'avoir chaque action soit responsable d'une seule tâche et vous n'avez pas à mettre dans le code pour savoir quel bouton a été cliqué, etc.


Et juste au cas où vous pensez à vous « Hey, puisque les deux sont la recherche, seulement avec un nombre différent de paramètres, je ne peux pas surcharger l'action Search? » No.

+0

+1, battez-moi. –

0

Kevin,

Changer votre page afin que vous ayez deux formes différentes, une pour chaque type de recherche. Lorsque vous cliquez sur Envoyer dans un formulaire, seuls les champs enfants de ce formulaire seront validés. Ensuite, comme suggéré par R0MANARMY, avoir deux actions distinctes, une pour chaque formulaire de recherche.

counsellorben

+0

Cela peut être mieux comme un commentaire, sauf si vous voulez ajouter une autre implémentation ou quelque chose. – R0MANARMY

+0

@ R0MAN, vous avez raison de dire que cela aurait été mieux comme commentaire, mais je n'avais pas le privilège de commenter quand j'ai posté ceci. Maintenant que je le fais, tous les messages comme celui-ci à l'avenir seront des commentaires. Newbie excuses! – counsellorben

Questions connexes