none
"Meus paragrafos somem" RRS feed

  • Pergunta

  • Olá pessoas.
    Sou novo no mundo .net e talvez essa minha duvida seja idiota, simples e engraçada. Mas preciso resolver esse problema o mais breve possível. Conto com a ajuda de vocês.

     

    Tenho um projeto usando asp.net mvc 2 c#
    Meu acesso a dados é utilizando LinqToSQl

    tenho uma tabela no banco chamada POST e nessa tabela tenho um campo CORPO onde eu salvo um html.

    Consumo o banco no meu controler. rederizo a view. mas na hora de mostrar o conteudo do campo CORPO, surge o problema. Os paragrafos somem. Todo o texto aparece, imagens aparecem mas as tags <p> somem fazendo com que meu texto fique todo junto.

     

    Se alguém tiver uma ideia do que pode estar acontecendo. por favor, me ajudem! kkkk

    segunda-feira, 2 de agosto de 2010 14:56

Respostas

  • Foi justamente o que eu fiz e verifiquei que ao invez de retornar as tag P e BR estava retornando "\r\n" então fiz o seguinte
    public static string TratarParagrafos(this string corpo)
        {
          var partes = corpo.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
          var corpoTratado = new StringBuilder();
    
          foreach (var parte in partes)
          {
            if (parte.StartsWith("<"))
            {
              corpoTratado.Append(parte);
              continue;
            }
            corpoTratado.Append("<p>" + parte + "</p>");
          }
          return corpoTratado.ToString();
        }
    
    Problema Resolvido!
    terça-feira, 3 de agosto de 2010 18:09

Todas as Respostas

  • Tente escrever seu texto em uma div... daí faça assim:

    <div id="texto" runat="server">
    </div>
    

    No momento da renderização faça algo do tipo:

    texto.InnerHTML = "valor do banco";
    

    Isso deve funcionar!

    Abraço,

    Fabrício

    segunda-feira, 2 de agosto de 2010 15:01
  • Ai fugiria um pouco do conceito de MVC
    segunda-feira, 2 de agosto de 2010 15:05
  • Pode passar seu código no momento que você mostra ele na View? Mais precisamente as tags <%= %>.
    segunda-feira, 2 de agosto de 2010 19:47
  • Guilherme o problema deve ser que você está usando o HTML.Encode, e ele remove a formatação HTML do texto.

    Procure usar somente <%= Model.Corpo %>


    Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://dotnettime.spaces.live.com/

    terça-feira, 3 de agosto de 2010 14:20
  • Sim Guilherme a observação do Alberto está certa, por isso pedi aquela parte do código. Cuidado, no 4.0 se você usar:

    <%: %>

    os : ja tem a função do Html.Encode

    terça-feira, 3 de agosto de 2010 14:28
  • estou passando o meu texto em um viewdata

    (na view)

    <%= ViewData["corpo"] %>

    (no controller)

    var post = PostDao.BuscarPorSlug(slug);
    ViewData["corpo"] = post.corpo;
    

    (na minha classe de dados "PostDao")

    public static post BuscarPorSlug(string slug)
        {
          return (from p in DataContext.Db.posts
              where p.slug.Equals(slug)
              select p).FirstOrDefault();
        }

    Só lembrando que tudo funciona perfeitamente, o único problema é que as tags de paragrafo(p e br) somem do meu texto.

    terça-feira, 3 de agosto de 2010 15:26
  • Guilherme não sei então o que está acontecendo, usei o ViewData em um teste aqui, e funcionou perfeitamente. A única coisa que me vem a cabeça é você verificar se o banco realmente contém as tags e se elas estão bem formatadas (abrindo e fechando corretamente).
    terça-feira, 3 de agosto de 2010 17:06
  • Foi justamente o que eu fiz e verifiquei que ao invez de retornar as tag P e BR estava retornando "\r\n" então fiz o seguinte
    public static string TratarParagrafos(this string corpo)
        {
          var partes = corpo.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
          var corpoTratado = new StringBuilder();
    
          foreach (var parte in partes)
          {
            if (parte.StartsWith("<"))
            {
              corpoTratado.Append(parte);
              continue;
            }
            corpoTratado.Append("<p>" + parte + "</p>");
          }
          return corpoTratado.ToString();
        }
    
    Problema Resolvido!
    terça-feira, 3 de agosto de 2010 18:09
  • estou passando o meu texto em um viewdata

    (na view)

    <%= ViewData["corpo"] %>

    (no controller)

    var post = PostDao.BuscarPorSlug(slug);
    
    ViewData["corpo"] = post.corpo;
    
    

    (na minha classe de dados "PostDao")

     

    public static post BuscarPorSlug(string slug)
    
     {
    
      return (from p in DataContext.Db.posts
    
       where p.slug.Equals(slug)
    
       select p).FirstOrDefault();
    
     }

     

    Só lembrando que tudo funciona perfeitamente, o único problema é que as tags de paragrafo(p e br) somem do meu texto.


    Como o murilo mensionou, o viewdata funciona normalmente sem remover usar a tecnica de trocar os caracteres "perigosos" pelos codigos HTML.

    Algum tratamento deve está acontecendo na sua aplicação, seja no banco, na inserção.

    Faça como ele disse, verifique se no seu banco está salvo o html mesmo.

    Depois faça o teste na marra inserindo o dado estáticamente:

    ViewData["corpo"] = @"<h1>Ola</h1><br /><span style='color:Red'>Ola</span><br /><small>Ola</small>";
    

    Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://dotnettime.spaces.live.com/

    terça-feira, 3 de agosto de 2010 18:20