Pregunta

Soy muy nuevo en el desarrollo de aplicaciones web y pensé que comenzaría con la tecnología reciente y, por lo tanto, estoy tratando de aprender Asp.net tan bien como el marco MVC a la vez. Esta es probablemente una pregunta muy simple para usted, profesionales de MVC.

Mi pregunta es si una visión parcial tiene una acción asociada, y de ser así, esta acción se invoca cada vez que usa una página normal RenderPartial() ¿En la vista parcial?

¿Fue útil?

Solución

Si bien puede tener una acción que devuelva una vista parcial, no necesita una acción para representar una visión parcial. RenderPartial toma la vista parcial y la convierte en el modelo y los datos dados si se suministran, en la vista actual (padre).

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 recargar 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

Hacer uso de una vista parcial dentro de una vista normal (no se necesita acción)

...some html...
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
...more html..

Mecanismo AJAX

Recargar parte de una página a través de AJAX (nota parcial se vuelve 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 );
     }
}

Otros consejos

La respuesta aceptada es completamente correcta, pero quiero agregar que puede cargar su vista parcial usando la carga jQuery. Se necesita menos configuración, si no desea considerar la concurrencia.

$("#Your-Container").load("/controller/action/id");

La respuesta es no. Pero a veces necesita una acción del controlador detrás de una vista parcial. Luego puede crear un ActionMethod que devuelve una vista parcial. Este Method de Action se puede llamar dentro de otra vista:

@Html.Action("StockWarningsPartial", "Stores")

El Method de Action puede verse como:

public ActionResult StockWarningsPartial()
{
      ....              
      return View("StockWarningsPartial", warnings);

}

y la vista 'stockwarningspartial.cshtml' comienza con:

@{
    Layout = null;
}

Para que no vuelva a renderizar su diseño circundante.

Pude lograr algo similar con esta lógica.

Dentro del .cshtml

@Html.Action("ActionMethodName", "ControllerName");

Dentro del controlador

[Route("some-action")]
public ActionResult ActionMethodName()
{
    var someModel = new SomeModel();
    ...
    return PartialView("SomeView.cshtml", someModel);
}

Y eso es.

Si necesita pasar los valores del .cshtml al método de acción, entonces eso es posible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top