RSS

ASP.NET MVC – Renderizando/Trabalhando com Partial View pelo Controller com chamada via ajax/jQuery

07 set

Em alguns casos podemos necessitar a renderização de uma Partial View via código. Como por exemplo, imaginando que em nossa MasterPage já exista algo como:

<% Html.RenderPartial("MontaDetalhesComprasUserControl"); %>

Onde o mesmo exiba os detalhes de todas as suas compras realizadas até o momento. Porém, ao adicionarmos um novo item em nossas compras, ou atualiza-la de alguma forma via Ajax, precisamos atualizar os detalhes quanto as nossas compras também!

Uma forma para realizar isto seria renderizarmos nossa Partial View via requisição Ajax para um Controller, passando como parâmetro o nome de nosso UserControl que desejamos renderizar:

$.ajax({
   type: 'POST',
   url: '/Suporte/RenderizaUserControl/?nomeUserControl=MontaDetalhesComprasUserControl.ascx',
   cache: false,
   success: function(dados) {
       $('#divDetalhesCompras').empty().html(dados);
   }
});

Em nosso SuporteController podemos criar o seguinte método:

public string RenderizaUserControl(string nomeUserControl)
{
      return Suporte.RenderizarUserControl("/Views/Shared/" + nomeUserControl);
}

E em nossa classe Suporte definimos o seguinte método, que efetivamente renderizará nossa Partial:

public static string RenderizarUserControl(string caminho)
{
   System.Web.UI.Page pagina = new System.Web.UI.Page();
   System.Web.UI.UserControl userControl = (System.Web.UI.UserControl)pagina.LoadControl(caminho);
   pagina.Controls.Add(userControl);
   StringWriter sw = new StringWriter();
   HttpContext.Current.Server.Execute(pagina, sw, true);

   return sw.ToString();
}

Pronto, com isso conseguimos renderizar nossas Partial Views via código!

😉

Até a próxima…

Anúncios
 
2 Comentários

Publicado por em 07/09/2011 em ASP.NET MVC, jQuery

 

Tags: , , ,

2 Respostas para “ASP.NET MVC – Renderizando/Trabalhando com Partial View pelo Controller com chamada via ajax/jQuery

  1. MIchel Banagouro

    07/09/2011 at 12:44 pm

    Muito bom o post!
    Mas não entendi o porque de vc ter criado esse método para buscar os UserControls sendo que o ASP .NET MVC já possui um recurso que busca uma PartialView e retorna como um PartialViewResult. A action ficaria assim:

    public ActionResult RenderizaUserControl(string nomeUserControl)
    {
    return PartialView(nomeUserControl);
    }

    E ae nesse caso vc também não precisaria passar o nome do UserControl com a extensão, poderia simplesmente chamar a action dessa forma:

    /Suporte/RenderizaUserControl/?nomeUserControl=MontaDetalhesComprasUserControl

    Abraços!

     
    • Rafael Zaccanini

      07/09/2011 at 7:25 pm

      Olá Michel,

      Primeiramente obrigado pelo feedback!

      Realmente se fossemos apenas renderizar nosso UserControl poderiamos utilizar return PartialView(nomeUserControl) e nossa requisição se resumia a isso:

      $('#divTeste').load('/Suporte/RenderizaUserControl/?nomeUserControl=TesteUserControl');

      Porém, coloquei uma forma alternativa, onde nos auxilia trabalhar com o HTML de nosso UserControl via código!

      Podemos realizar simplesmente algo como: (mesmo tendo conciência que isso é responsabilidade da nossa View):

      sw.Write("

      Outras Informações

      ");
      return sw.ToString();

      Mas, realmente apenas para renderização o melhor é utilizarmos return PartialView !!

      Abraços… 😉

       

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: