Pergunta

Sou muito novo no desenvolvimento de aplicativos da web e pensei em começar com a tecnologia recente e, por isso, estou tentando aprender asp.net como bem como a estrutura do MVC de uma só vez. Esta é provavelmente uma pergunta muito simples para você, profissionais do MVC.

Minha pergunta é que uma visão parcial tem uma ação associada e, se assim for, essa ação é invocada sempre que uma página normal usa RenderPartial() Na visão parcial?

Foi útil?

Solução

Embora você possa ter uma ação que retorne uma visão parcial, você não precisa de uma ação para renderizar uma visão parcial. RenderParcial pega a visualização parcial e a renderiza, usando o modelo fornecido e visualizar dados, se fornecidos, na visualização atual (pai).

Você pode querer uma ação que retorne uma visualização parcial se estiver usando o AJAX para carregar/recarregar parte de uma página. Nesse caso, o retorno da visualização completo não é desejado, pois você só deseja recarregar parte da página. Nesse caso, você pode ter a ação, basta retornar a visualização parcial que corresponde a essa seção da página.

Mecanismo padrão

Utilizando a visão parcial dentro de uma visão normal (nenhuma ação necessária)

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

Mecanismo Ajax

Recarregar parte de uma página via Ajax (nota parcial é renderizada em linha na página inicial da página)

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

Outras dicas

A resposta aceita está completamente correta, mas quero acrescentar que você pode carregar sua visualização parcial usando a carga jQuery. Menos configuração necessária, se você não deseja considerar a simultaneidade.

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

A resposta é não. Mas às vezes você precisa de alguma ação do controlador por trás de uma visão parcial. Em seguida, você pode criar uma ação que retorne uma visualização parcial. Este método de ação pode ser chamado dentro de outra visão:

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

O Method do Action pode parecer:

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

}

e a visualização 'StockwarningsParcial.cshtml' começa com:

@{
    Layout = null;
}

Para fazer isso não renderizar o layout circundante novamente.

Consegui alcançar algo semelhante com essa lógica.

Dentro do .cshtml

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

Dentro do controlador

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

E é isso.

Se você precisar passar valores do .cshtml para o método de ação, isso será possível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top