2015-08-11 1 views
1

J'ai un formulaire, qui peut être atteint à partir de 5 pages différentes. Le formulaire a enregistrer et terminer les boutons.MVC revenir à l'action différente précédente

Enregistrer le bouton - soumet le formulaire (fait la demande POST), puis recharge la même page (demande GET) Bouton Terminer - soumet les formulaires (demande POST) et doit aller à l'un des 5 emplacements à partir desquels le formulaire a été atteint.

J'ai essayé d'utiliser TempData et d'enregistrer l'emplacement sur la requête GET de formulaire, semble bien jusqu'à ce que j'utilise le bouton Enregistrer, car quand il recharge la page, l'URL TempData est la même URL (actuelle).

Je crois que jQuery a quelque chose comme window.history.back et ignore ces rechargements, mais est-ce possible, de le faire immédiatement sur le bouton submit et post, sans utiliser jQuery? Peut-être qu'il est possible de faire l'historique de la page précédente dans MVC Controller (je veux dire sauter les recharges et obtenir une première URL différente)? Toute aide est grandement appréciée.

Répondre

0

Votre méthode utilisant un paramètre GET semble bonne. Je n'ai même pas besoin de javascript ce qui est bien car on m'a toujours dit que history.go est le diable. Pourquoi ne pouvez-vous pas passer le paramètre inchangé si l'utilisateur clique sur Enregistrer pour ne pas perdre l'URL de référence?

je faire ce qui suit:

  • requêtes utilisateur form.html référence = origin.html
  • serveur renvoie le formulaire avec un champ caché contenant l'adresse de référence
  • sur Enregistrer le formulaire est soumis et le champ caché est conservé afin que nous ne perdons pas l'information
  • à la fin du formulaire est soumis et l'utilisateur est redirigé vers l'URL de référence

Je ne suis pas un expert en sécurité, mais vous pourriez vouloir vérifier/échapper l'url de référence, pour éviter xss pauvre.

+0

Mais comment puis-je conserver cette URL "inchangée" d'original? quand je clique sur sauvegarder, ça rafraîchit la page et l'url précédente devient la même url de forme ... ou j'ai manqué une idée ici – GrandaS

+0

Peut-être que je simplifie trop comment fonctionne votre application. Je ne vois pas l'intérêt de soumettre le formulaire en utilisant une requête POST, puis en actualisant la page avec une requête GET. Vous pouvez faire les deux avec une seule requête POST. Lorsque vous manipulez le formulaire, votre contrôleur peut récupérer l'URL d'origine du champ masqué et l'ajouter au nouveau formulaire de la page actualisée. –

+0

Je me rends compte que puisque vous avez deux actions de soumission, vous devez utiliser javascript pour soumettre votre formulaire. Vous pouvez utiliser des boutons simples pour les actions "Enregistrer" et "Terminer". Lorsque vous cliquez sur le bouton, vous modifiez l'action du formulaire en utilisant $ ('# form'). Attr ('action', 'correspondanteUrl'); 'et soumettez ensuite le formulaire en utilisant $ ('# form'). Submit () ', de cette façon, vous ne devriez pas avoir à faire une deuxième requête pour actualiser la page. Si vous êtes attaché à cette deuxième requête, vous pouvez actualiser la page en utilisant 'window.location.href = 'form.html? Reference = origin.html'' au lieu de simplement rafraîchir la page. –