2009-07-06 15 views
7

¿Hay alguna manera de especificar varios ID de destino de actualización con Ajax.ActionLink para que pueda representar un conjunto de vistas parciales en la devolución de llamada?ID de objetivos de actualización múltiple con Ajax.ActionLink ASP.Net MVC

El problema que estoy viendo es que Ajax.ActionLink solo proporciona una ID de destino para actualizar, pero lo que necesito es actualizar varias regiones de la página con datos diferentes después de una llamada ajax.

¡Cualquier ayuda en esto sería genial! ¡Gracias!

Respuesta

4

No, no lo hay. Sin embargo, podría escribir código que lo haga usted mismo. Necesitaría:

  1. Particione el HTML devuelto en diferentes "áreas" que aplicará a diferentes partes de la página. Puede hacer esto en el controlador (tal vez realizando múltiples acciones y almacenando una lista de los fragmentos HTML devueltos) o en JavaScript.
  2. Escriba el código JavaScript para tomar el HTML devuelto, repita los objetivos que desea actualizar y aplique el fragmento de HTML apropiado a cada uno. El código se parecería al código siguiente.
  3. No utilice el ayudante HTML de formulario Ajax. En cambio, renderice un formulario estándar y envíelo a través de JavaScript.

Ejemplo:

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

Esto supone que la acción se llama devolverá un objeto en el que los nombres de propiedad son los identificadores de los elementos para actualizar, y los valores de la propiedad son los fragmentos HTML como cadenas.

6

Puede consultar este enlace: http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx

que tenía el mismo problema y me ayuda a resolverlo

+0

lo usé, funcionó, con cambios menores para que funcione en VB. aún así, es una solución desordenada. El equipo de mvc necesita ser golpeado en la cabeza por recurrir a esto, ¿por qué no pueden simplemente hacer un marco que FUNCIONA y hace cosas cotidianas comunes y comunes como uno esperaría? –

+0

@ Erx_VB.NExT.Coder: la solución más limpia es usar el resultado Json, puede actualizar cualquier parte de la página que desee mediante javascript en este resultado – Gregoire

+0

@ Erx_VB.NExT.Coder Sé que esto fue hace algún tiempo, pero debe mira en Apache Wicket, si no tienes que quedarte con asp.net Framework. Wicket usa Java para el código del lado del servidor (solo una pequeña diferencia). – eaglei22

1

Sé que esta pregunta es viejo, pero si se utiliza la misma solución que @Gregoire señaló (http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx) para el lado del servidor se puede pasar varios ID de AjaxOptions

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

el marco MVC precederá automáticamente al '#' a id1 en este caso. A continuación, tendrá que modificar jquery.unobtrusive-ajax.js 's función asyncOnSuccess alrededor de la línea # 45 para tener este aspecto:

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

El Javascript es sólo con el mismo ID que ha pasado a agarrar solamente que el contenido y sustituir el mismo id con el mismo contenido. Esto también funciona para Ajax.BeginForm(). ¿Tener sentido?

Cuestiones relacionadas