2009-07-06 17 views
7

C'è un modo per specificare più ID di destinazione di aggiornamento con Ajax.ActionLink in modo che sia possibile eseguire il rendering di un insieme di viste parziali sul callback?ID di destinazione di aggiornamento multipli con Ajax.ActionLink ASP.Net MVC

Il problema che sto vedendo è che Ajax.ActionLink fornisce solo un ID destinazione da aggiornare, ma quello che mi serve è aggiornare più aree della pagina con dati diversi dopo una chiamata Ajax.

Qualsiasi aiuto su questo sarebbe fantastico! Grazie!

risposta

4

No, non c'è. Potresti, comunque, scrivere codice che fa da te. Dovresti:

  1. Partizionare l'HTML restituito in diverse "aree" che verranno applicate a diverse parti della pagina. Si potrebbe fare ciò sul controller (magari visualizzando più azioni e memorizzando un elenco dei frammenti HTML restituiti) o in JavaScript.
  2. Scrivere codice JavaScript per ottenere l'HTML restituito, iterare le destinazioni che si desidera aggiornare e applicare a ciascuna il frammento HTML appropriato. Il codice apparirebbe come il seguente codice.
  3. Non utilizzare l'helper HTML del modulo Ajax. Invece, visualizza un modulo standard e invialo tramite JavaScript.

Esempio:

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

Ciò presuppone che l'azione si chiama restituirà un oggetto in cui i nomi di proprietà sono gli ID degli elementi da aggiornare, e i valori delle proprietà sono i frammenti HTML come stringhe.

6

È possibile controllare questo link: http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx

Ho avuto lo stesso problema e mi aiuta a risolverlo

+0

ho usato questo, ha funzionato, con piccole modifiche per farlo funzionare in VB. ancora, è una soluzione disordinata. Il team di mvc ha bisogno di essere colpito in testa per averci affidato a questo, perché non possono semplicemente creare un framework che FUNZIONA e fa cose quotidiane comuni e basilari come ci si aspetterebbe? –

+0

@ Erx_VB.NExT.Coder: la soluzione più pulita è quella di utilizzare il risultato Json, è possibile aggiornare qualsiasi parte della pagina che si desidera utilizzando javascript su questo risultato – Gregoire

+0

@ Erx_VB.NExT.Coder So che questo è stato qualche tempo fa, ma si dovrebbe guarda in Apache Wicket, se non devi stare con asp.net Framework. Wicket usa però Java per il codice lato server (solo una piccola differenza). – eaglei22

1

So che questa domanda è vecchia, ma se si utilizza la stessa soluzione @Gregoire indicò (http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx) per il lato server è possibile passare più iD in AjaxOptions

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

il framework MVC farà precedere automaticamente il '#' a id1 in questo caso. Sarà quindi necessario modificare jquery.unobtrusive-ajax.js 's funzione asyncOnSuccess attorno alla riga # 45 di simile a questa:

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; 
    } 
}); 

Il Javascript è solo utilizzando lo stesso ID che è passato per afferrare solo che il contenuto e sostituire lo stesso ID con lo stesso soddisfare. Questo funziona anche per Ajax.BeginForm(). Ha senso?

Problemi correlati