2011-06-14 32 views
14

Estoy usando vistas parciales múltiples en mi vista. en el lado izquierdo Tengo un botón de enlace.Cómo actualizar múltiples vistas parciales al hacer clic en Ajax.Actionlink

En medio tengo 2 PartialView supongamos Arriba y Abajo I m capaz de actualizar el PartialView Hasta ahora quiero actualizar la vista hacia abajo parcial en el clic del mismo botón de enlace

i M capaz de enviar solo un UpdateTargetID en el botón Ajax.ActionLink pero quiero actualizar 2 Partialview uno clcik del mismo botón.

1) ¿Hay alguna manera de que pueda pasar más de una UpdateTargetID en Ajax.ActionLink o 2) puedo volver vista parcial múltiple en el controlador principal o cualquier otra forma que sugieren u Por favor, responda yo

Gracias a todos por responder Déjeme decirle lo que he hecho para actualizar varias vistas parciales en un solo clic Este es el enlace de acción que estoy usando para hacer clic en Aquí estoy usando una función OnSucess de este enlace de acción para actualizar, este enlace de Acción está en una vista parcial

    <%= Ajax.ActionLink("Select", "Employee", new { Id = Employee.EmployeeID }, new AjaxOptions { UpdateTargetId = "EmployeeDiv", HttpMethod = "Post", OnSuccess = "function(){EmployeeHistory(-2," + Employee.EmployeeID.ToString() + ");}" })%> 

Este es un javascript que yo estoy llamando desde un punto de vista parcial

function EmployeeHistory(EmployeeID) { 
    var url = '<%= Url.Action("PartialviewAction", "ControllerName") %>' 
    $('#PartialviewDiv1').load(url, { Id: EmployeeID }); 
    var url1 = '<%= Url.Action("PartialviewAction", "ControllerName") %>' 
    $('#PartialviewDiv2').load(url1, { Id: EmployeeID }); 

} 

y estos dos div están a la vista Índice cual quiero actualizar

 <div id="Paritalview div1"><% Html.RenderPartial("PartialViewname1"); %></div> 
     <div id="Paritalview div2"><% Html.RenderPartial("PartialViewname2"); %></div> 
+0

Echa un vistazo a mi respuesta aquí: http://stackoverflow.com/a/14036279/386739 Funciona muy bien para mí – Ryan

Respuesta

14

sí hay - Don No use Ajax.ActionLink.

IMO, la biblioteca MS Ajax, como con Web Forms, está hinchada.

Debe ser sencillo - usar jQuery - entonces usted tiene el control total:

$(function() { 
    $('#somelink').click(function(e) { 
     e.preventDefault(); 

     $.get('/controller/action1', function(data) { 
     $('#up').html(data); 
     }); 

     $.get('/controller/action2', function(data) { 
     $('#down').html(data); 
     }); 
    }); 
}); 

Sin embargo, ya está actualizando ambos paneles, sugeriría envolver los dos paneles centrales en una vista parcial de su propio - luego sirva eso a través de un único método de acción, de esa manera solo necesita 1 llamada ajax.

Editar

Como se menciona @FelixM, se debe utilizar Url.Action o Url.RouteUrl para generar la dirección URL de la llamada AJAX, así que si sus rutas cambian entonces sus JS no es necesario, por ejemplo:

.get('@Url.Action('Controller', 'Action1')', function(data)

o

.get('@Url.RouteUrl('SomeNamedRoute')', function(data)

Si coloca esta secuencia de comandos en un archivo externo, deberá usar una técnica para configurar la url en la vista principal y luego leer desde la variable externa.

Tales técnicas incluyen una variable de JavaScript, un campo oculto, una URL que pasa para funcionar como parámetro, etc.

+2

Buena respuesta. Solo para estar seguro, en lugar de poner explícitamente la URL del Controlador/Acción, use Url.Action para representar la URL correcta. – FelixMM

+0

Gracias por la respuesta, algo necesito actualizar Estoy usando 3 vistas parciales y el enlace en el que estoy haciendo clic está en el lado izquierdo y también está en una vista parcial, Soy nuevo en MVC, Por favor dígame cómo usarlo también –

+0

+1, el control total acordado conduce a la felicidad. Si tuviera que actualizar varias áreas de una página correspondientes a vistas parciales al mismo tiempo, lo haría utilizando una sola acción con una respuesta json con la ayuda de una implementación "RenderViewToString". –

Cuestiones relacionadas