1 votes

Transmettre des données dynamiques au contrôleur avec ASP.NET MVC et jQuery lors de la soumission d'un formulaire

J'ai un site web qui est essentiellement une page unique contenant un tas de contenu dynamique. En fonctionnement normal, l'utilisateur ne devrait jamais quitter cette page. Cependant, pour gérer/rapporter certaines erreurs, j'ai besoin de rediriger vers une page d'erreur. Sur la page d'erreur, je veux donc fournir un lien vers la page normale qui fournit à l'application les informations nécessaires pour reconstruire tout le contenu dynamique qui était précédemment ouvert.

Je pense pouvoir reconstruire la page en analysant la chaîne de requête avec du javascript et en rechargeant le contenu dynamique. Je ne suis pas sûr que ce soit la meilleure méthode, mais j'ai réussi à la faire fonctionner. Donc href in le lien sur ma page d'erreur doit ressembler à quelque chose comme :

MySite/MyController/MyAction?1,5,8,9

où les nombres de la chaîne de requête indiquent essentiellement les identifiants des sections de contenu à charger sur document.ready .

Cependant, je ne sais pas comment générer ce lien. Je pense qu'il faut que je transmette ces nombres au contrôleur d'une manière ou d'une autre, afin que le contrôleur puisse les transmettre à la vue d'erreur qui générera alors le lien "retour".

J'ai un formulaire html standard pour télécharger un fichier :

using (Html.BeginForm("MyAction", "MyController", 
                       FormMethod.Post, 
                       new { enctype = "multipart/form-data" }))

                       { /* ... */ }

J'ai ensuite un bouton qui appelle la fonction jQuery .submit() sur le formulaire.

La question est donc la suivante : lorsque je clique sur le bouton qui soumet le formulaire, comment puis-je attacher les données supplémentaires afin de pouvoir y accéder dans mon contrôleur ?

J'espère que c'est clair, si ce n'est pas le cas, faites-le moi savoir et je vous donnerai plus de détails. Je vous remercie.

Editar : Il m'est venu à l'esprit que je pouvais soumettre ces informations par le biais d'un champ caché dans le formulaire. J'essaierai si je ne trouve pas de meilleure solution, mais j'aimerais une solution plus générique si possible car j'ai un certain nombre de formulaires sur la page et idéalement j'aimerais que ces données soient disponibles pour chacun d'entre eux.

1voto

Jack Points 73

Votre url devrait être biult juste avant d'envoyer le formulaire avec .submit() pas dans Html.BeginForm tag.... Je ne vois pas le problème ici... de quoi s'agit-il exactement ?

1voto

Rippo Points 10580

Je sais que ce n'est pas tout à fait ce que vous avez demandé, mais au lieu d'avoir à rediriger l'utilisateur, pourquoi ne pas afficher une fenêtre modale (basée sur jquery) qui contient une iFrame. Le href de l'iFrame peut être déterminé par la page appelante et peut afficher la page d'erreur.

Je ne sais pas si cela peut vous aider, mais j'ai utilisé cette technique et j'ai constaté que je n'avais pas besoin de me préoccuper du retour de l'utilisateur à son point de départ. De plus, vous n'aurez pas besoin de reconstruire/recharger le contenu original puisqu'il sera toujours sur la page d'appel.

* EDIT * Après avoir lu vos commentaires, vous pourriez peut-être faire ce qui suit...

  1. Au clic sur le lien - ouvrir une fenêtre contextuelle modale pointant vers une iframe.
  2. L'iframe appelle l'action du contrôleur pour télécharger le fichier.
  3. L'affichage pourrait dire "Téléchargement du fichier... veuillez patienter, cliquez ici pour fermer, etc.
  4. Si l'action génère une erreur, il faut alors rediriger vers la page d'erreur comme si elle se trouvait dans la fenêtre modale iframe.

De cette manière, vous ne devez pas quitter la page d'appel en cours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X