2010-06-22 4 views
1

Ceci est une question de suivi à celui que j'ai posté la semaine dernière "Ajax.ActionLink not Posting". Je l'ai finalement envoyé à Post, et il appelle correctement mon action Supprimer et supprime l'enregistrement. La méthode Delete renvoie une RedirectToAction ("List") de sorte que le nouvel ensemble de données moins l'enregistrement supprimé soit ré-listé. Sauf que ce qui se passe réellement est - RIEN. La liste ne change pas. Et je suis assez sûr de savoir pourquoi: appeler Ajax.ActionLink renvoie un résultat Ajax qui n'est supposé remplacer qu'un élément désigné (le paramètre d'option UpdateTargetId) dans le document. Et puisque je n'en ai pas désigné, il ne remplace rien, même si c'est une toute nouvelle page. Ma question est, qu'est-ce que je passe à l'AjaxOption.UpdateTargetId pour l'obtenir pour effacer la page entière et recharger avec le nouveau résultat, comme si Html.ActionLink avait été appelé (rappelant que la seule raison pour utiliser Ajax .ActionLink était que je voulais que la méthode soit invoquée avec un POST au lieu d'un GET)? (Et puisque cette page utilise une page principale, je n'ai pas la possibilité de mettre simplement un ID sur l'élément body.)Obtenir Ajax retour pour remplacer la page entière

+1

Je ne comprends pas pourquoi vous voulez utiliser Ajax si vous rechargez effectivement toute la page de toute façon? Vous pouvez faire un POST sans Ajax. – fearofawhackplanet

+0

Pouvez-vous me diriger vers un lien? J'ai passé environ une journée à essayer de comprendre comment je suis arrivé à cette "solution" Ajax.ActionLink. –

+0

Comme le dit fearofawhackplanet, Ajax est spécifiquement pour * les mises à jour partielles de page *. Si vous voulez seulement des mises à jour entières, vous n'avez pas besoin d'ajax. –

Répondre

0

Vous pouvez faire un POST sans Ajax. Vous devez utiliser un formulaire et modifier votre ActionLink en un bouton Envoyer. Ce pourrait être le moyen le plus simple.

Sinon, vous devez modifier votre action Liste pour retourner une vue partielle. C'est ce qui rend à votre UpdateTargetId, que vous pouvez simplement définir comme un div externe sur votre page.

Avez-vous vraiment besoin de recharger votre liste? Vous pouvez faire votre Ajax POST pour supprimer la ligne dans la base de données et utiliser la propriété OnSuccess de AjaxOptions pour appeler une fonction JavaScript qui supprime ensuite la ligne du HTML sur la page.

+0

Eh bien, vous faites probablement un bon point. Je sais comment POST en utilisant

, mais je ne voulais pas l'utiliser car d'autres fonctions sont effectuées par l'opération de soumission de formulaire. Mais peut-être que j'ai besoin de repenser cela. Ce que je voulais vraiment, c'était quelque chose qui fonctionne comme Html.ActionLink, mais qui a fait un POST au lieu d'un GET. J'ai essayé de créer un tag d'ancrage avec un onclick = javascript: $. Post (/ controller/action), mais je n'ai pas réussi à le faire fonctionner et je n'ai pas compris pourquoi. –

+0

Pour fermer la boucle, j'ai suivi votre conseil: j'ai créé une vue partielle ListPartial à partir de la partie grille de ma vue Liste, et l'ai appelée depuis la vue Liste, en l'enfermant dans une div. Ensuite, j'ai fait en sorte que l'action Supprimer construisait toutes les données pour une vue Liste, et que ma vue Supprimer ne contienne rien de plus qu'un RenderPartial de ListPartial. Maintenant, dans mon Ajax.ActionLink, je peux utiliser l'ID de la div qui contient le partial comme UpdateTargetID, et quand le Delete se termine, sa sortie (le remplace). Merci pour votre aide. –

Questions connexes