Eu tenho um controlador que gera string contendo marcações html. Agora, quando estou exibindo-o em visualizações, ele é exibido como string simples contendo todas as tags. Tentei usar o auxiliar Html para codificar / decodificar para exibi-lo corretamente, mas não está funcionando.
string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";
Em minhas opiniões,
@Html.Encode(str)
c#
asp.net
asp.net-mvc
asp.net-mvc-4
Mukesh Sharma
fonte
fonte
Html.Raw
deve ajudar.HtmlStrin
classe, como emHtmlString str = new HtmlString("<span>Some HTML here</span>");
Respostas:
Você está perto e deseja usar
@Html.Raw(str)
@Html.Encode
recebe cadeias de caracteres e garante que todos os caracteres especiais sejam tratados corretamente. Isso inclui caracteres como espaços.fonte
Em
IHtmlString
vez disso, você deveria usar :Sempre que você tem propriedades ou variáveis de modelo que precisam conter HTML, sinto que geralmente é uma prática melhor. Em primeiro lugar, é um pouco mais limpo. Por exemplo:
Comparado com:
Além disso, também acho que é um pouco mais seguro do que usar
@Html.Raw()
, já que a preocupação de saber se seus dados são HTML é mantida em seu controlador. Em um ambiente onde você tem desenvolvedores front-end vs. back-end, seus desenvolvedores back-end podem estar mais sintonizados com quais dados podem conter valores HTML, mantendo assim essa preocupação no back-end (controlador).Geralmente tento evitar o uso,
Html.Raw()
sempre que possível.Outra coisa que vale a pena observar é que não tenho certeza para onde você está atribuindo
str
, mas algumas coisas que me preocupam em como você pode estar implementando isso.Primeiro, isso deve ser feito em um controlador, independentemente de sua solução (
IHtmlString
ouHtml.Raw
). Você deve evitar qualquer lógica como essa em sua visão, pois ela realmente não pertence a ela.Além disso, você deve usar seu
ViewModel
para obter valores para sua visualização (e novamente, de preferência usandoIHtmlString
como o tipo de propriedade). Ver algo assim@Html.Encode(str)
é um pouco preocupante, a menos que você esteja fazendo isso apenas para simplificar seu exemplo.fonte
você pode usar
@Html.Raw(str)
Veja MSDN para mais
fonte
Eu tive um problema semelhante com campos de entrada HTML no MVC. A página da web mostrava apenas a primeira palavra-chave do campo. Exemplo: campo de entrada: "A raposa marrom rápida" Valor exibido: "A"
A resolução foi colocar a variável entre aspas na declaração de valor da seguinte forma:
fonte
Tive um problema semelhante recentemente, e o google me colocou aqui, então coloco esta resposta aqui no caso de outros pousarem aqui também, para completar.
Eu percebi que quando eu tinha formatado html incorretamente , eu estava tendo todas as minhas tags html removidas , com apenas o conteúdo não tag restante . Eu particularmente tive uma tabela sem uma tag de abertura de tabela, e então todas as minhas tags html de toda a string foram completamente arrancadas.
Portanto, se o procedimento acima não funcionar e você ainda estiver coçando a cabeça, verifique também o html para ser válido.
Percebi que mesmo depois de fazer funcionar, o MVC estava adicionando tags tbody onde eu não tinha nenhuma. Isso me diz que está acontecendo uma limpeza (MVC 5) e que, quando não pode acontecer, remove todas / algumas tags.
fonte