Mientras que puede tener una acción que devuelve una vista parcial, no necesita una acción para generar una vista parcial. RenderPartial toma la vista parcial y la representa, utilizando el modelo dado y los datos de vista si se suministran, en la vista actual (principal).
Es posible que desee una acción que devuelva una vista parcial si está utilizando AJAX para cargar/recargar parte de una página. En ese caso, no se desea devolver la vista completa ya que solo desea volver a cargar parte de la página. En este caso, puede hacer que la acción simplemente devuelva la vista parcial que corresponde a esa sección de la página.
mecanismo estándar
Haciendo uso de vista parcial dentro de una vista normal (ninguna acción necesaria)
...some html...
<% Html.RenderPartial("Partial", Model.PartialModel); %>
...more html..
Ajax mecanismo de
Recarga parte de una página a través de AJAX (nota parcial se representa en línea en la carga de la página inicial)
...some html...
<div id="partial">
<% Html.RenderPartial("Partial", Model.PartialModel); %>
</div>
...more html...
<script type="text/javascript">
$(function() {
$('#someButton').click(function() {
$.ajax({
url: '/controller/action',
data: ...some data for action...,
dataType: 'html',
success: function(data) {
$('#partial').html(data);
},
...
});
});
});
</script>
controlador para AJAX
public ActionResult Action(...)
{
var model = ...
...
if (Request.IsAjaxRequest())
{
return PartialView("Partial", model.PartialModel);
}
else
{
return View(model);
}
}
Veo, solo estoy jugando con la plantilla VS para una aplicación MVC. Estoy tratando de mostrar múltiples listas de clientes, por ejemplo, dentro de una vista parcial. Actualmente tengo una clase de modelo de transferencia de datos, ¿cómo enviaría este modelo a la vista parcial sin involucrar la vista de página que representa esta vista parcial? ¡Gracias por su ayuda! – yogibear
El parcial siempre se incluye en la vista principal. La única vez que devolvería el parcial por sí solo sería si estuviera actualizando a través de AJAX. Es de suponer que utilizaría un parcial para mostrar ** a ** una lista de clientes. Quizás use un bucle foreach en su vista para iterar sobre las listas (contenidas en el modelo de vista), pasando cada una al parcial como su modelo. – tvanfosson
+1 ¡Muy bien! Buena respuesta. –