2010-01-06 6 views
0

J'écris un formulaire de contact dans ASP.NET MVC. L'utilisateur aura la possibilité d'attacher des fichiers réguliers (en utilisant des fonctions normales de fichier/navigation) ainsi que la possibilité de rechercher une personne en particulier et de joindre des fichiers liés à cette personne. La première partie est assez simple, mais la deuxième partie est ce qui me donne des maux de tête.Comment passer des informations de la fenêtre contextuelle/de la fenêtre modale à la fenêtre de base dans ASP.NET MVC

Pour la deuxième partie, j'utiliserai un assistant de 2-3 pages. L'utilisateur sera accueilli avec un champ de recherche, tapez le nom de l'utilisateur, cliquez sur rechercher, et une liste de résultats s'affichera. Après avoir cliqué sur un nom, on leur présente une liste d'enregistrements connexes dont ils peuvent vérifier certains ou aucun. L'utilisateur cliquera alors sur attach et les fichiers apparaîtront dans le formulaire de contact. Je crains que si je sors de la page de contact ou contourne les contrôleurs dans la fenêtre modale (les fenêtres modales peuvent naviguer entre les pages?) Ou la fenêtre pop-up, je vais en quelque sorte bousiller toute la MVC architecture. Je ne veux pas me tromper avec les appels AJAX alors comment faire pour ouvrir une fenêtre, parcourir cet assistant rapide de recherche de 2-3 pages, puis réécrire le contenu dans la fenêtre de base? Est-ce juste une question de base JavaScript et HTML ou pensez-vous que cela sera plus impliqué ou est-ce que AJAX est juste une fatalité?

Répondre

1

Rendu des vues partielles via jQuery est un moyen efficace de mettre à jour uniquement certaines parties d'une vue.

Sans entrer dans jQuery et comment l'utiliser Ouvrons juste.

À votre avis, PartialView ou MasterPage, lien vers le fichier script jQuery. Tout d'abord, nous allons créer un ActionResult que la fonction jQuery appellera.C'est exactement la même chose que pour tout autre ActionResult seulement, il ne retournera pas une vue, mais retournera une vue partielle.

public ActionResult getFilteredData(string filter) 
{ 
    //do something interesting with filter like 
    //returning a list of items from a db 

    //once we have our data we can return 
    //a partial view giving to it the data as its model 
    return PartialView("MyPartialView", returnedDataList); 
} 

C'est à peu près tout pour l'ActionResult.

Comme j'espère que vous pouvez le voir, la méthode prend simplement un paramètre, filtre les données dans une liste, puis renvoie une vue partielle dont la liste de données est le modèle défini.

Le code HTML ressemble à ceci; Remarque J'ai nommé la div identique à la vue partielle. Ces deux ne sont aucunement liés je pense juste qu'il garde les choses simples à lire.

Maintenant pour le jQuery.

$.post("/MyController/getFilteredData", { filter: “dogs” }, 
    function(newHTML) { 
document.getElementById("myPartialView").innerHTML = newHTML; 
}); 

Tout ce que fait jQuery est de revenir à l'action en passant un filtre de "chiens". La réponse de ActionResult est capturée dans newHTML qui est ensuite placée à l'intérieur de la div appelée myPartialView.

+0

@tribium, vous devrez en tirer tout ce que vous pouvez et passer à travers des données plus spécifiques. Je pense toujours que l'idée d'avoir une Vue pour chaque étape et de passer le Modèle de Vue à chaque action de contrôleur de vues est la voie à suivre. – griegs

0

Pourquoi le problème est-il Ajax? Si vous utilisez Ajax, vous pouvez afficher les détails, retourner avec une vue partielle et l'afficher sur la page. De cette façon, vous ne quittez jamais votre page de base et tout ira bien avec le monde et vous pouvez reporter toutes les données à votre contrôleur de page de base.

Donc, pour récapituler. Chaque étape de votre assistant peut être une vue partielle et à mesure que vous progressez dans les étapes, vous pouvez afficher la vue partielle au même emplacement.

L'alternative est que les trois étapes soient sur la page de base pour commencer et que vous puissiez afficher/masquer tham si nécessaire. De plus, n'oubliez pas le principe REST. Si vous voulez que votre assistant soit individuel, chaque vue doit être responsable de lui-même. Vous pouvez bien sûr appeler un contrôleur avec un ID ou vous pouvez traverser un modèle complet. De cette façon, votre vue peut charger le modèle, se render, mettre à jour les propriétés du modèle et passer le modèle à la vue suivante.

Juste quelques idées. C'est à vous de choisir la meilleure saveur, je suppose.

Je choisirais ma dernière option. Je pense que le passage à travers le modèle de vues à chaque contrôleur vous donne le meilleur résultat.

J'espère que cette aide.

+0

J'essaie d'éviter AJAX simplement parce que je ne suis pas familier avec son utilisation. Je suppose que c'est le bon moment pour apprendre. Connaissez-vous des tutoriels qui vont dans le sens de ce que vous avez suggéré? J'ai essayé de chercher "ajax vue partielle" et n'ai pas eu beaucoup de chance. – tridium

+0

Oui, cette recherche ne vous fera aucune faveur. Je viens de terminer un document pour certains des gars ici sur jQuery et vues partielles. Je vais créer une autre réponse et l'afficher. – griegs

Questions connexes