J'ai un contrôleur qui génère une chaîne contenant des balises html.Maintenant, lorsque je l'affiche sur les vues, elle s'affiche sous forme de chaîne simple contenant toutes les balises. J'ai essayé d'utiliser l'aide Html pour encoder / décoder pour l'afficher correctement, mais cela ne fonctionne pas.
string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";
Sur mon point de vue,
@Html.Encode(str)
c#
asp.net
asp.net-mvc
asp.net-mvc-4
Mukesh Sharma
la source
la source
Html.Raw
devrait aider.HtmlStrin
classe, comme dansHtmlString str = new HtmlString("<span>Some HTML here</span>");
Réponses:
Vous êtes proche que vous souhaitez utiliser
@Html.Raw(str)
@Html.Encode
prend des chaînes et s'assure que tous les caractères spéciaux sont gérés correctement. Ceux-ci incluent des caractères comme des espaces.la source
Vous devriez utiliser à la
IHtmlString
place:Chaque fois que vous avez des propriétés de modèle ou des variables qui doivent contenir du HTML, je pense que c'est généralement une meilleure pratique. Tout d'abord, c'est un peu plus propre. Par exemple:
Par rapport à:
De plus, je pense aussi que c'est un peu plus sûr que d'utiliser
@Html.Raw()
, car le souci de savoir si vos données sont HTML est conservé dans votre contrôleur. Dans un environnement où vous avez des développeurs front-end vs back-end, vos développeurs back-end peuvent être plus en phase avec les données pouvant contenir des valeurs HTML, gardant ainsi cette préoccupation dans le back-end (contrôleur).J'essaie généralement d'éviter d'utiliser
Html.Raw()
autant que possible.Une autre chose à noter, c'est que je ne sais pas où vous attribuez
str
, mais quelques points qui me préoccupent quant à la façon dont vous pourriez l'implémenter.Tout d'abord, cela doit être fait dans un contrôleur, quelle que soit votre solution (
IHtmlString
ouHtml.Raw
). Vous devriez éviter toute logique comme celle-ci à votre avis, car elle n'y appartient pas vraiment.De plus, vous devriez utiliser votre
ViewModel
pour obtenir des valeurs dans votre vue (et encore une fois, idéalement en utilisantIHtmlString
comme type de propriété). Voir quelque chose comme@Html.Encode(str)
est un peu inquiétant, à moins que vous ne le fassiez juste pour simplifier votre exemple.la source
vous pouvez utiliser
@Html.Raw(str)
Voir MSDN pour plus
la source
J'ai eu un problème similaire avec les champs d'entrée HTML dans MVC. Le site Web paginé n'affiche que le premier mot-clé du champ. Exemple: champ de saisie: "Le renard brun rapide" Valeur affichée: "Le"
La résolution était de mettre la variable entre guillemets dans la déclaration de valeur comme suit:
la source
J'ai eu un problème similaire récemment, et Google m'a atterri ici, donc je mets cette réponse ici au cas où d'autres atterriraient ici aussi, par souci d'exhaustivité.
J'ai remarqué que lorsque j'avais du HTML mal formaté , j'avais en fait toutes mes balises html supprimées , avec juste le contenu non-tag restant . J'avais en particulier une table avec une balise de table d'ouverture manquante, puis toutes mes balises html de la chaîne entière étaient complètement arrachées.
Donc, si ce qui précède ne fonctionne pas et que vous vous grattez toujours la tête, vérifiez également que votre code HTML est valide.
Je remarque que même après l'avoir fait fonctionner, MVC ajoutait des balises tbody là où je n'en avais pas. Cela me dit qu'il y a un nettoyage en cours (MVC 5), et que quand cela ne peut pas arriver, il supprime toutes / certaines balises.
la source