ID de cible de mise à jour multiples avec Ajax.ActionLink ASP.Net MVC

Existe-t-il un moyen de spécifier plusieurs identifiants de cible de mise à jour avec Ajax.ActionLink afin que je puisse restituer un ensemble de vues partielles lors du rappel?

Le problème que je vois est qu’Ajax.ActionLink ne fournit qu’un seul ID cible à mettre à jour, mais ce dont j’ai besoin, c’est de mettre à jour plusieurs régions de la page avec des données différentes après un appel ajax.

Toute aide sur ce serait génial! Merci!

Vous pouvez vérifier ce lien: http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx

J’ai eu le même problème et ça m’aide à le résoudre

Non, il n’y en a pas. Vous pouvez cependant écrire du code qui le fait vous-même. Vous auriez besoin de:

  1. Partitionnez le code HTML renvoyé en différentes “zones” que vous appliquerez à différentes parties de la page. Vous pouvez le faire sur le contrôleur (en effectuant plusieurs actions et en stockant une liste des fragments HTML renvoyés) ou en JavaScript.
  2. Écrivez le code JavaScript pour récupérer le code HTML renvoyé, répétez les cibles à mettre à jour et appliquez le fragment HTML approprié à chacune. Le code ressemblerait au code ci-dessous.
  3. N’utilisez pas l’assistant HTML du formulaire Ajax. A la place, rendez un formulaire standard et soumettez-le via JavaScript.

Exemple:

$.ajax({ type: "POST", url: "/action/controller", success: function(data) { var key; for (key in data) { $("#" + key).html(data[key]); } } }); 

Cela suppose que l’action que vous appelez renverra un object dont les noms de propriété sont les ID des éléments à mettre à jour et les valeurs de propriété sont les fragments HTML en tant que chaînes.

Je sais que cette question est ancienne, mais si vous utilisez la même solution que celle indiquée par @Gregoire (http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload .aspx) pour le côté serveur, vous pouvez passer plusieurs identifiants dans AjaxOptions

 @Ajax.ActionLink("Link", "Action", new AjaxOptions { UpdateTargetId = "id1, #id2" }) 

le framework MVC appenda automatiquement le “#” à id1 dans ce cas. Vous devrez ensuite modifier la fonction jquery.unobtrusive-ajax.js autour de la ligne 45 pour ressembler à ceci:

 mode = (element.getAtsortingbute("data-ajax-mode") || "").toUpperCase(); $(element.getAtsortingbute("data-ajax-update")).each(function (i, update) { var top, html = $("#" + update.id, data).html(); switch (mode) { case "BEFORE": top = update.firstChild; $("
").html(html).contents().each(function () { update.insertBefore(this, top); }); break; case "AFTER": $("
").html(html).contents().each(function () { update.appendChild(this); }); break; default: $(update).html(html); break; } });

Le code Javascript utilise simplement le même identifiant que celui qui a été transmis pour récupérer uniquement ce contenu et remplacer le même identifiant par ce même contenu. Cela fonctionne également pour Ajax.BeginForm (). Avoir un sens?