2010-03-03 26 views
6

Estoy satisfecho con lo que hace la función RenderAction(). Sin embargo, me gustaría ajaxify la carga y el almacenamiento de datos en la acción parcialmente representada, para que todo ocurra en una página.ASP.NET MVC - Ajaxified RenderAction

Imagine el siguiente caso: Tengo una vista de detalles del artículo donde hay un enlace "Agregar comentario" debajo del contenido del artículo. Cuando se hace clic en él, aparecerá un formulario de comentarios debajo del contenido de la publicación. El usuario debe poder completar el cuadro de comentarios y enviar los datos sin actualizar toda la vista, solo la acción parcialmente renderizada. Además, la vista debe proporcionar varios comentarios para ser agregados en la misma sesión (varias llamadas AJAX a RenderAction());

¿Cuál es la mejor manera de lograr eso?

Respuesta

13

Acción:

[HttpGet] 
public ActionResult AddComment() 
{ 
    return PartialView(); // presumes partial view is called "AddComment" and needs no model 
          // you know what to do otherwise. 
} 

Vista:

<input type="button" value="Add Comment" onclick="addComment()" /> 

JavaScript:

function addComment() { 
    $("#comments").append("<div></div>").load("/ControllerName/AddComment"); 
} 

Eso es lo básico. Puedes hacer esto tan complicado como quieras.

+0

¿Qué pasa al enviar los datos de los comentarios? ¿Eso sucederá "dentro" de la vista del artículo, sin refrescar la página? – xantrus

+0

Para enviar los datos de comentarios, solo 'POST' un formulario, de forma síncrona o asíncrona. Puede tener un formulario por comentario, si lo desea, si lo coloca en su parcial. Si no desea que la página se actualice, entonces 'POST' el formulario de forma asíncrona y actualice la página (elimine el editor y agregue un 'div' con el comentario) en JavaScript. –