none
PartialView - Dúvidas de iniciante RRS feed

  • Pergunta

  • Após um post de discussão aberto por mim, de como deixar o sistema Web sem tanta cara de Desktop estou pensando em abandonar o JQGrid e fazer tudo na mão, usando PartialView.

    Então vamos a minhas dúvidas:

    1 - O model principal da minha View é que vai ser utilizado nos partial view?
    2 - No caso de cada PartialView estiver usando um model diferente como seria a implementação?
    3 - Eu vi que tem vários tipos de retornos do Ajax (html, json e redirect) imagino que cada um deles seria bom em alguma situação, porém no caso de uma grid normal de dados com página qual seria a melhor? Ou depende da minha implementação?

    Vi este exemplo: http://www.devmedia.com.br/asp-net-mvc-e-ajax-atualizando-o-conteudo-de-partial-views-via-jquery/26232 será que é bom exemplo?

    A partir deste exemplo tive a dúvida:

    4 - Se eu quiser fazer o uso do PartialView, dentro da meu controler vai ter que sempre ter um PartialViewResult ou não?

    Valeu pela ajuda povo...

    abs

    Marlon Tiedt
    www.sesmt.com.br



    • Editado Marlon Tiedt domingo, 24 de fevereiro de 2013 18:28
    domingo, 24 de fevereiro de 2013 18:04

Respostas


  • 1 - O model principal da minha View é que vai ser utilizado nos partial view?

    Depende, mas geralmente não pois vai receber por demanda diretamente a lista de itens. Por exemplo, modelo com Pedido e ItemPedido, seu model do partial view seria lista de ItemPedido e sua view principal Pedido.

    2 - No caso de cada PartialView estiver usando um model diferente como seria a implementação?

    Depende, uma das opções seria usar ajax form com UpdateTargetId (bom para casos simples): http://geekswithblogs.net/blachniet/archive/2011/08/03/updating-partial-views-with-unobtrusive-ajax-in-mvc-3.aspx

    Outra seria jquery na mão com ajax: 

    Em algum lugar da view principal colocar uma div que receberá o retorno da partial view via ajax:

    ...formulário para busca com Nome e Matricula...

    <div id="divTabela"></div>

    JS:

    ....JavaScript do click do botão que faria a pesquisa....

            var objetoFiltro = {
              Nome: $('#Nome').val(),
              Matricula: $('#Matricula').val()
            };

            var json = $.toJSON({ 'modelFiltro': objetoFiltro });

            $.ajax({
                url: '/SuaController/SuaAction',
                type: "post",
                data: json,
                contentType: 'application/json',
                dataType: 'html',
                success: function (data) {
                    $('#divTabela').html(data);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                  //tratar erro
                }
            });

    //Além do $.ajax, tem o $.load que é mais direto para injetar HTML. Dá uma pesquisada também.

    PartialView "Tabela.cshtml":

    @model List<xxx>
    
    <table>
        <tr>
            <th>Coluna</th>
        </tr>
    
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>@item.xxx</td>
                </tr>
            }
        </tbody>
    </table>

    Na action da sua controller:

            public ActionResult SuaAction(SauClasseModelFiltro modelFiltro)  
            {  
                //var suaLista = .... trata filtros para a List ...
                return PartialView("Tabela", suaList);
            }

    3 - Eu vi que tem vários tipos de retornos do Ajax (html, json e redirect) imagino que cada um deles seria bom em alguma situação, porém no caso de uma grid normal de dados com página qual seria a melhor? Ou depende da minha implementação?

    No caso de retornar HTML/partialview, use o tipo html. Json é para retornar numa estrutura de objetos.

    4 - Se eu quiser fazer o uso do PartialView, dentro da meu controler vai ter que sempre ter um PartialViewResult ou não?

    PartialViewResult herda de ViewResultBase que herda de ActionResult, então logicamente pode usar ActionResult, PartialViewResult só se fizer questão de deixar claro que só será possível retornar partial view ou se precisar acessar alguma propriedade específica. 

    Sobre abandonar o JQGrid ou outra solução moldada para produtividade, se o projeto já estava em andamento e tem prazo, cuidado para não se embolar, principalmente se estiver trabalhando sozinho, sofisticação exige equipe. Então mais uma vez, solução padrão não existe, alguns usam componentes prontos como Telerik ou kendoUI e são felizes, já outros como eu preferem liberdade pelos requisitos exigirem muita personalização, o importante é você avaliar as opções e decidir o que for melhor para seu projeto. Tem até casos em que são mais adequados usar WebApi com framework JS MVC ou MVVM, bom para "webapps".


    • Editado rs.developer domingo, 24 de fevereiro de 2013 23:14
    • Sugerido como Resposta Priscila Mayumi Sato terça-feira, 26 de fevereiro de 2013 12:09
    • Marcado como Resposta Marlon Tiedt quarta-feira, 27 de fevereiro de 2013 16:07
    domingo, 24 de fevereiro de 2013 19:34