2010-04-24 4 views
1

J'ai joué avec différents aspects de MVC depuis un certain temps, et j'ai atteint une situation où je ne suis pas sûr de la meilleure façon de résoudre un problème. J'espère que la communauté SO va m'aider ici: PFormulaire de commentaires Ajax dans ASP.NET MVC2, howto?

J'ai vu un certain nombre d'exemples de Ajax.BeginForm sur Internet, et il semble être une idée très chouette. Par exemple. vous avez une liste déroulante où vous sélectionnez un client - et en sélectionnant un, il va charger les détails de ce client dans un espace réservé sur la page. Cela fonctionne parfaitement bien.

Mais que faire si vous voulez lier une validation dans la boîte?

Imaginez simplement une page d'article, et les commentaires des utilisateurs dans le bas. Au-dessous de la zone des commentaires, il y a une case ajax-y "Ajouter un commentaire". Lorsqu'un utilisateur ajoute un commentaire, il apparaît dans la zone des commentaires, en dessous du dernier commentaire.

Si je définis Ajax.BeginForm pour ajouter le résultat de l'appel à la zone Commentaires, cela fonctionnera correctement. Mais que faire si les données publiées ne sont pas valides? Au lieu d'ajouter un commentaire "réussi" à la zone des commentaires, je dois montrer les erreurs de validation de l'utilisateur.

À ce stade, j'ai décidé que la zone à l'intérieur du Ajax.BeginForm sera à l'intérieur d'un partiel, et les soumissions du formulaire rendra ce partiel. La validation fonctionne bien. À chaque soumission, nous rechargeons le contenu à l'intérieur de l'élément de formulaire. Mais comment ajouter le commentaire réussi au sommet?

Autres points à considérer: Le formulaire de commentaire a également un bouton "Aperçu". Lorsque l'utilisateur clique sur Aperçu, je devrais charger le commentaire rendu dans une zone d'aperçu. Cela sera probablement aussi à l'intérieur de la zone de formulaire.

Je pensais utiliser des résultats JSON à la place. Lorsque l'utilisateur soumet le formulaire, le code du serveur génère un objet Json avec une valeur de succès, et html rend partiels comme certaines propriétés. Quelque chose comme

{ "success": true, "form": "<html form data>", "comment": "successful comment html to inject into the page" } 

Ce serait une solution parfaite, sauf qu'il n'y a aucun moyen de MVC pour rendre une partie dans une chaîne, à l'intérieur du contrôleur (séparation du contexte, souvenez-vous?). UPD: On dirait que personne ne connaît de réponse à celle-ci. Cela signifie-t-il qu'il n'y a aucun moyen de le faire, ou vous ne le savez pas, les gars?

+0

Ce n'est pas la personne comme réponse. Ce n'est pas clair quelle est votre question. –

Répondre

0

après lui avoir donné plus de considération + obtenir plus d'expérience avec MVC, j'ai décidé de briser le problème, et je suis venu à la conclusion suivante. Je ne sais pas si quelqu'un trouvera utile

  1. Avec une Ajax.BeginForm qui nécessite la validation sur le terrain, le retour de la soumission ne doit retourner le code HTML du formulaire. De cette façon, si la validation a échoué, la réponse contiendra les messages d'erreur et l'interface sera transparente. Le résultat contiendra très probablement le formulaire entier, y compris la déclaration de celui-ci.

  2. L'aperçu dans ce cas est un problème simple. Lorsque l'utilisateur clique sur le bouton d'aperçu, le formulaire peut être posté, et le résultat contiendra le formulaire rempli + la boîte de prévisualisation. Alternativement, le bouton Aperçu peut être un Ajax.LinkButton qui va sérialiser le formulaire, publier les données sur le serveur, qui le rendra dans un commentaire. Le js du côté client placera alors cet aperçu dans le conteneur requis.

  3. En cas de réussite, vous disposez de plusieurs options, en fonction des exigences et de la présentation.
    a) Le résultat du formulaire submit peut renvoyer le commentaire + le formulaire vierge (prêt pour un nouveau commentaire) par exemple. Lorsque le formulaire de commentaire est au-dessous de tous les commentaires, le commentaire a été ajouté au bas du formulaire
    b) Le résultat peut contenir le formulaire vierge + un petit script js qui mettra à jour la zone des commentaires/charger le dernier commentaire sur la page
    c) Il peut également forcer une actualisation de la page parente, pour s'assurer que le commentaire nouvellement affiché sera immédiatement visible par l'utilisateur.

    Fondamentalement, ce choix dépend des exigences du cas particulier.