2009-07-06 6 views
7

Existe-t-il un moyen de spécifier plusieurs ID de mise à jour de cible avec Ajax.ActionLink pour que je puisse afficher un ensemble de vues partielles sur le rappel? Le problème que je vois est que Ajax.ActionLink fournit seulement un identifiant cible pour que je mette à jour, mais ce dont j'ai besoin est de mettre à jour plusieurs régions de la page avec des données différentes après un appel ajax.Plusieurs ID de cible de mise à jour avec Ajax.ActionLink ASP.Net MVC

Toute aide sur ce serait génial! Merci!

Répondre

4

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

  1. Partitionner le code HTML retourné dans différentes "zones" que vous appliquerez à différentes parties de la page. Vous pouvez le faire sur le contrôleur (peut-être en rendant plusieurs actions et en stockant une liste des fragments HTML retournés) ou en JavaScript.
  2. Ecrivez du code JavaScript pour récupérer le code HTML renvoyé, répétez les cibles que vous souhaitez mettre à jour et appliquez le fragment HTML approprié à chacun. Le code ressemblerait à quelque chose comme le code ci-dessous. N'utilisez pas l'aide HTML de formulaire Ajax. Au lieu de cela, affichez 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 objet où les noms de propriétés sont les ID des éléments à mettre à jour, et les valeurs de propriété sont les fragments HTML sous forme de chaînes.

6

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 il me aide à le résoudre

+0

J'ai utilisé cela, a travaillé, avec des modifications mineures pour le faire fonctionner en VB. encore, c'est une solution désordonnée. L'équipe de mvc a besoin d'être claqué dans la tête pour nous recourrir à cela, pourquoi ne peuvent-ils pas simplement faire un cadre qui fonctionne et fait des choses courantes, basiques de tous les jours comme on pourrait s'y attendre? –

+0

@ Erx_VB.NExT.Coder: la solution de nettoyage est d'utiliser le résultat JSON, vous pouvez mettre à jour toute partie de la page que vous voulez en utilisant javascript sur ce résultat – Gregoire

+0

@ Erx_VB.NExT.Coder Je sais que c'était il y a quelque temps, mais vous devriez regarder dans Apache Wicket, si vous ne devez pas rester avec asp.net Framework. Wicket utilise Java pour le code côté serveur (seulement une différence mineure). – eaglei22

1

Je sais que cette question est vieux, mais si vous utilisez la même solution que @Gregoire a souligné (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 ids dans AjaxOptions

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

le cadre MVC ajoutera automatiquement le '#' au id1 dans ce cas. Vous devrez alors modifier la fonction asyncOnSuccess de jquery.unobtrusive-ajax.js autour de la ligne n ° 45 à ressembler à ceci:

mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase(); 
$(element.getAttribute("data-ajax-update")).each(function (i, update) { 
    var top, 
     html = $("#" + update.id, data).html(); 

    switch (mode) { 
    case "BEFORE": 
     top = update.firstChild; 
     $("<div />").html(html).contents().each(function() { 
      update.insertBefore(this, top); 
     }); 
     break; 
    case "AFTER": 
     $("<div />").html(html).contents().each(function() { 
      update.appendChild(this); 
     }); 
     break; 
    default: 
     $(update).html(html); 
     break; 
    } 
}); 

Le Javascript est juste en utilisant le même identifiant qui est passé à saisir seulement que le contenu et remplacer le même identifiant avec ce même contenu. Cela fonctionne également pour Ajax.BeginForm(). Avoir du sens?

Questions connexes