web-dev-qa-db-fra.com

Est-il possible d'afficher du HTML brut à partir d'une base de données dans ASP.NET MVC 3?

J'ai une table dans ma base de données où l'une des propriétés est une page Html (sans les balises html, head et body), et j'ai l'intention de la mettre au milieu d'une de mes vues - disons, j'appelle une méthode cotroller qui prend un argument et retourne une vue en passant cette grande chaîne html comme modèle. Je l'ai cherché (pas beaucoup, je l'avoue), et j'ai trouvé la méthode suivante:

<%= System.Web.HttpUtility.HtmlDecode(yourEncodedHtmlFromYouDatabase) %>

Cela a été trouvé ici dans stackoverflow. Quand j'ai essayé une approche de rasoir similaire, je me suis retrouvé avec ceci:

@System.Web.HttpUtility.HtmlDecode("<h1>Test</h1>")

C'est l'idée, mais cela n'a pas fonctionné comme je l'avais prévu.

44

Tout ce dont vous avez besoin est: @Html.Raw(yourEncodedHtmlFromYouDatabase)

Je suppose que le html de la base de données a été correctement filtré (ou au moins à partir d'une source fiable), car sinon, vous pourriez vous ouvrir à des attaques de script intersites.

La raison pour laquelle votre approche n'a pas fonctionné est que Razor code HTML la sortie par défaut (chaque fois que vous utilisez @ pour afficher quelque chose). Html.Raw indique à Razor que vous faites confiance au HTML et que vous souhaitez l'afficher sans l'encoder (car c'est déjà du HTML brut).

89
Bennor McCarthy

Vous pouvez également renvoyer une chaîne HTML et Razor affichera la mise en forme correcte, par exemple.

@Html.GetSomeHtml()

public static HtmlString GetSomeHtml()
{
    var Data = "abc<br/>123";
    return new HtmlString(Data);
}

Cela vous permettra d'afficher du HTML

12
LiamB