none
jQuery Partial View RRS feed

  • Pergunta

  • Gostaria de chamar com jQuery uma partial view que não tem controller e nem action,

    o código que estou tentando é o seguinte, mas não esta dando certo, alguém sabe de alguma alternativa pra carregar a partial view?

    <script type="text/javascript">
        
        $(document).ready(function () {
            // initialise plugins
            $(function () {
                $('#div_centrotrabalho').load('@Url.Content("~/Areas/Sistema/Views/Shared/_CentroTrabalho.cshtml")');
            });
        });
    </script>
    
    <div id="div_centrotrabalho"></div>

    já tentei usar:

    @Html.Partial("~/Areas/Sistema/Views/Shared/_MenuOperacoes.cshtml")

    só que dessa forma o sistema só carrega após carregar o MenuOperacoes, então gostaria de usar jQuery pra carregar via ajax.

    sábado, 13 de abril de 2013 14:04

Todas as Respostas

  • Olá, Pablotdv

    Partial Views não podem ser acessadas diretamente. O Framework que é responsável por renderizá-las através do ActionResult.
    Em resumo, você deve criar um método Action e passar a sua URL como argumento para o método ajax.

    $('#div_centrotrabalho').load('@Url.Action("Action","Controller")');


    • Sugerido como Resposta Leonardo Lima da Silva sábado, 13 de abril de 2013 18:02
    • Não Sugerido como Resposta Pablotdv sábado, 13 de abril de 2013 23:14
    sábado, 13 de abril de 2013 18:02
  • o meu problema é que estou usando o plugin MvcSiteMapProvider, quando faço dessa forma em vez do meu current node ser por exemplo CRM/Banco/Index, fica o que estiver dentro do load
    sábado, 13 de abril de 2013 23:15
  • Crie uma Action no seu controller com o mesmo nome da PartialView.

    Uma partialview não pode ser chamada diretamente via javascript mas se você colocar uma Action no seu controller a mesma será renderizada corretamente pois o javascript vai encontrar uma url válida para obter a requisição/resposta http.

    domingo, 14 de abril de 2013 01:55
    Moderador
  • João, dessa forma que tu explica funciona, porém por estar usando o plugin MvcSiteMapProvider quando faço uma requição via Controller/Action usando o jQuery o meu currentNode fica sempre apontado para o que foi feito a requisição pelo javascript.

    por exemplo, ao acessar o caminho http://localhost/Sistema/Pesquisa

    meu current node seria o Pesquisa, mas se eu usar o código a seguir para renderizar minha partial View o meu CurrentNode fica no MontaMenu.

    $('#div_centrotrabalho').load('@Url.Action("MontaMenu","Menu")');
    segunda-feira, 15 de abril de 2013 12:16
  • Olá Pablo,

    O ASP.NET impede que todo arquivo que comece com underline (_ALGUMACOISA) seja acessado diretamente. No seu caso você deveria fazer um action no seu controller, exemplo:

    public ActionResult CentroDeTrabalho()
    {
         return PartialView("~/Views/Shared/_CentroDeTrabalho");
    }
    
    

    Apos isso você deve carregar seu action via jquery, e printa-lo na tela:

    $.ajax({
       url: '@Url.Content("~/Controller/CentroDeTrabalho")',
       success: function (view) {
          $('#div_centrotrabalho').html(view);
       }
    });

    Não testei, mas deve funcionar ;)


    Ao infinito e além!

    segunda-feira, 15 de abril de 2013 14:05
  • Fábio, o problema que quando uso dessa forma como tu explica, o meu CurrentNode fica sempre no CentroTrabalho por estar sendo chamado via Ajax.

    a renderização do menu funciona bem, só tenho o problema com o SiteMap.

    segunda-feira, 15 de abril de 2013 17:47
  • Fábio, na realidade estava deixa @Html.MvcSiteMap().SiteMapPath() dentro da minha partial view, por isso que não estava mostrando corretamente, aparentemente esta funcionando legal.


    segunda-feira, 15 de abril de 2013 18:04
  • Você vai se poupar muita dor de cabeça se criar uma rota fixa para suas chamadas ajax.
    segunda-feira, 15 de abril de 2013 18:24
    Moderador
  • João, como seria essas rotas fixas?

    sou meu novo ainda no mundo do MVC.

    segunda-feira, 15 de abril de 2013 18:45
  • Você pode criar um controller específico somente para suas chamadas ajax.

    segunda-feira, 15 de abril de 2013 22:56
    Moderador