none
Paginação de lista RRS feed

  • Pergunta

  • Boa noite pessoal,

    Procurei minha dúvida no help do Visual Studio, na internet e em vários blogs e não encontrei a resposta. Então resolvi postar aqui:

    Tenho um model que possui apenas uma propriedade do tipo string. Essa propriedade é preenchida com um trecho de html (alguns <div>, <p>, <a>, etc). Tenho um controller que monta uma lista desse model e retorna para uma view que tem um WebGrid.

    A intensão é fazer com que o WebGrid lexiba essa lista renderizando o html com o helper Html.Raw(). Ai ocorre o erro.

    Se eu escrever o trecho html direto no Html.Raw() funciona, se eu tento passar via item do Model dá um erro: 

    A melhor correspondência de método sobrecarregado 'System.Web.Mvc.HtmlHelper.Raw(string)' tem alguns argumentos inválidos

    Meu model:

    namespace Projeto
    {
        public class ItemPaginacao
        {
            public string TrechoHtml { get; set; }
        }
    }

    Trecho que monta o html no meu controller:

                    foreach (var item in pesquisa)
                    {
                        var itemHtml = new StringBuilder();
                        itemHtml.Append("<div class='linha'>");
                        itemHtml.Append("</div>");
                        listaHtml.Add(new ItemPaginacao {TrechoHtml = itemHtml.ToString()});
                    }

    Meu WebGrid:

    @{
        var wGrid = new WebGrid(Model, canPage: true, rowsPerPage: 15);
    }

    @wGrid.GetHtml(columns: wGrid.Columns(wGrid.Column("TrechoHtml", "", item => (Html.Raw(item)))))


    Na verdade eu só queria paginar de forma dinâmica minha view. As maneiras de paginação pro asp.net mvc que encontrei na web dão trabalho.

    Alguém conhece algum outro método ou sabe como eu posso resolver esse problema?

    Obrigado.

    sexta-feira, 1 de fevereiro de 2013 02:22

Respostas

  • Olá Guilherme,

    A internção é esta. Se você olhar no código do meu WebGrid, a propriedade canPage está setada como true, que indica que haverá paginação. O que não está funcionando é o @Html.Raw() dentro do WebGrid quando a string com as tags vêm na propriedade do Model, contruído anteriormente no controller.

    Como eu citei, se eu escrever assim:

    @wGrid.GetHtml(columns: wGrid.Columns(wGrid.Column("TrechoHtml", "", item => (Html.Raw(item))))) //o item está com uma string contendo as tags html

    ... não funciona, mas se eu escrever assim:

    @wGrid.GetHtml(columns: wGrid.Columns(wGrid.Column("TrechoHtml", "", item => (Html.Raw("<div id='teste'>Teste</div>")))))

    ... funciona!!!

    Alguma idéia?

    • Marcado como Resposta Jomar Souza sexta-feira, 21 de novembro de 2014 11:15
    sexta-feira, 1 de fevereiro de 2013 16:09

Todas as Respostas

  • não dá pra usar a paginção propria do webgrid não?

    não entendi o motivo.


    Aprendendo Ad Eternum Se minha resposta foi útil por favor marque, se minha resposta respondeu completamente sua dúvida, marque-a como resposta, se houve outra resposta melhor, marque ela. Assim facilita a busca e melhora a organização do fórum e o nosso aprendizado.

    sexta-feira, 1 de fevereiro de 2013 13:37
  • Olá Guilherme,

    A internção é esta. Se você olhar no código do meu WebGrid, a propriedade canPage está setada como true, que indica que haverá paginação. O que não está funcionando é o @Html.Raw() dentro do WebGrid quando a string com as tags vêm na propriedade do Model, contruído anteriormente no controller.

    Como eu citei, se eu escrever assim:

    @wGrid.GetHtml(columns: wGrid.Columns(wGrid.Column("TrechoHtml", "", item => (Html.Raw(item))))) //o item está com uma string contendo as tags html

    ... não funciona, mas se eu escrever assim:

    @wGrid.GetHtml(columns: wGrid.Columns(wGrid.Column("TrechoHtml", "", item => (Html.Raw("<div id='teste'>Teste</div>")))))

    ... funciona!!!

    Alguma idéia?

    • Marcado como Resposta Jomar Souza sexta-feira, 21 de novembro de 2014 11:15
    sexta-feira, 1 de fevereiro de 2013 16:09