2009-08-16 4 views
1

J'ai une application ASP.NET MVC, avec une vue qui soumet des valeurs de formulaire via POST. Lorsque ma méthode d'action de contrôleur reçoit les données POSTed, elle ne fait que des choses côté serveur, pas besoin de rétroaction pour le client.ASP.NET MVC: toutes les requêtes POST doivent-elles renvoyer quelque chose?

Cependant, je suis obligé de retourner un ActionResult. Si je renvoie null ou EmptyResult, la page devient vide après la soumission du formulaire. Je pourrais retourner la vue, mais c'est assez "cher" à construire, donc je me demande s'il y a un moyen d'avoir simplement les valeurs POSTed et que le navigateur n'attend rien en retour?

Répondre

2

Une requête POST (ou même GET) par le client implique que le client attend une réponse du serveur. Si le client obtient une réponse vide, il affichera une page vide. Il n'y a aucun moyen de contourner cela avec n'importe quel cadre que vous utilisez du côté du client.

Cependant, comme d'autres l'ont noté que vous avez quelques options: pour envoyer votre demande POST au côté serveur

  1. Vous pouvez utiliser un POST asynchrone (via AJAX). De cette façon, le client envoie une requête POST et attend une réponse de retour, mais cela n'affecte pas la page sur laquelle se trouve le client. Le tout est fait sur un autre fil, pour ainsi dire, donc ce n'est pas grave si vous ne retournez pas une réponse. Vous pouvez utiliser la bibliothèque côté client jQuery fournie avec le package MVC pour le faire facilement. Vous pouvez utiliser le modèle Post-Redirect-Get. Dans cette méthode, le client va faire la demande POST et attendre une réponse. Cependant, votre méthode d'action de traitement POST ne renverra pas de réponse concrète mais retournera un RedirectResult à la méthode d'action de gestion GET. Le client demandera que la méthode d'action GET gère la vue et attende sa réponse. rends le. Le client, en retour, affichera cette vue. Cependant, je crois que votre logique de génération de vue est chère, donc vous ne voulez pas continuer à la générer encore et encore. L'une des options disponibles dans ce cas consiste à utiliser le côté serveur output caching pour mettre en cache la sortie View de la méthode de gestion GET. De cette façon, même si vous utilisez le modèle Post-Redirect-Get, vous ne reconstruirez pas vos vues encore et encore.

Maintenant laissez-moi rapidement passer en revue les avantages et inconvénients de chaque alternative.

Plus:

  1. Facile à mettre en œuvre; beaucoup moins de trafic vers et depuis le client; la page du client ne continue pas à recharger.
  2. Fonctionne également dans tous les navigateurs; Si votre vue doit ultérieurement changer en réponse à votre requête POST, il sera plus facile de l'intégrer dans ce modèle.

Moins:

  1. Besoins JavaScript activé (et compatible) dans le client (cela pourrait être un problème si vous ciblez les appareils mobiles); plus difficile à déboguer et à maintenir puisque vous étendez la logique sur des calques séparés.
  2. Beaucoup plus bavard, c'est à dire. plus de trafic vers et depuis le client; Vous devez affiner la méthode de mise en cache de sortie afin de ne pas finir par servir un contenu périmé (ou même incorrect).
2

Vous devez envisager de publier le formulaire en utilisant des techniques AJAX telles que jquery.post.

0

L'action POST traditionnelle est une commande permettant au navigateur d'envoyer des données ET de RECEVOIR quelque chose en retour. Envisager d'utiliser des techniques ajax comme solution élégante et assez facile.

modifier: POST ne devrait pas renvoyer une réponse de contenu html! Il devrait juste poster des données, puis rediriger vers GET une nouvelle page (pourrait être la même URL)

3

Envisagez d'utiliser ajax pour publier les données. Vous pouvez le faire facilement avec jQuery ou les choses ajax MVC intégré.

Ou, juste de rediriger vers une autre page (peut-être le même?) Dans votre gestionnaire de publication. C'est probablement l'approche souhaitée de toute façon; Si quelqu'un actualise la page après avoir rempli un formulaire, il ne sera pas présenté avec le dialogue renvoyer-le-formulaire. Ceci est connu comme le Post-Redirect-Get Pattern (ou PRG).

1

Correction rapide pour cela, il suffit de retourner une vue déjà créée à l'utilisateur, comme après avoir posté, rediriger vers votre page d'accueil ou rediriger vers votre page d'obtenir.

+0

Ces types de réponses doivent être affichés en tant que «commentaires». Je comprends que vous n'aurez pas le droit de poster des commentaires jusqu'à ce que vous atteigniez 50 points de réputation. Vous demandant de lire à travers https://meta.stackexchange.com/questions/214173/why-do-i-ne-50-reputation-comment-what-can-i-do-instead –

+1

Merci @AmitP, je l'ai lu, dois-je supprimer cette réponse? – vishwajeetrkale

+0

sera le mieux, si vous pouvez fournir plus de détails sur la réponse. Si vous avez des extraits de code ou des détails plus spécifiques qui peuvent résoudre la question sont les bienvenus –

Questions connexes