2010-12-14 36 views
1

J'ai cette méthode d'extension que j'ai créée et elle renvoie une chaîne de toutes les catégories dans ma base de données comme hyperliens. Génial!Comment est-ce que je dirais à un navigateur de rendre une chaîne, pas l'afficher?

@Html.MyMenu() 

Le problème est que les liens sont affichés en tant que texte et ne sont pas rendus en tant que liens hypertexte.

Lorsque vous affichez le code source je vois:

<div id="menucontainer"> 

       &lt;a href=&quot;/Anuncio/Electronics&quot;&gt;Electronics&lt;/a&gt;&lt;a href=&quot;/Anuncio/Clothes&quot;&gt;Clothes&lt;/a&gt;&lt;a href=&quot;/Anuncio/Domestic&quot;&gt;Domestic&lt;/a&gt;&lt;a href=&quot;/Anuncio/Garden&quot;&gt;Garden&lt;/a&gt; 

      </div> 

Je pense que je peux me tromper mais je me souviens que, dans MVC2 (en utilisant le moteur d'affichage par défaut) vous aviez:

<%: this is rendered, right? %> 

Ou suis Je me trompe? De toute façon, j'utilise MVC3 et le moteur Razor. Merci beaucoup pour votre aide les gars. J'apprécie vraiment d'apprendre autant que je peux à ce sujet.

+0

S'il vous plaît laissez-moi savoir si vous avez besoin de voir le code dans la vue. Merci! –

Répondre

2

Le rasoir échappe HTML par défaut.

Pour éviter cela, s'il vous plaît faire quelque chose comme ceci:

Writing/outputting HTML strings unescaped

+0

Merci, ceci m'a aidé à résoudre mon problème. Voici ma solution: @ (new HtmlString (@ Html.MyMenu())) –

+0

Mais vous pouvez aussi faire 'Html.MyMenu()' retourner un 'HtmlString'! Je suppose que ce serait mieux ... Sauf si vous en avez besoin pour retourner une chaîne normale (pour la réutiliser ailleurs, par exemple). – rsenna

0

bien votre méthode d'extension devrait être de retour d'un MvcHtmlString afin d'afficher correctement sur votre page en utilisant le <%: %> Si elle retourne une chaîne, tout Les chevrons et autres caractères spéciaux html seront codés en html.

+0

J'ai seulement mentionné les crochets pour illustrer ce que j'essaie d'accomplir. Vous ne pouvez pas utiliser les crochets de MVC2 sur le moteur Razor. –

1

Dans RC2, une nouvelle méthode appelée @ HTml.Raw devrait y être ajoutée.

Ou vous pouvez modifier MyMenu pour renvoyer HtmlString ou MvcString plutôt qu'une simple chaîne.

+0

Je ne trouve pas cette méthode sur MSDN et Google ne renvoie aucun résultat. Pouvez-vous partager un lien? –

+0

@sergio sûr! http://stackoverflow.com/questions/4281424/asp-net-mvc-razor-output-html-string-non-escaped/4282073#4282073 – Zote

0

RC2 soutient @ Html.Raw() à la sortie HTML brut

De Scott Guthrie's RC2 anouncement

Avec RC2, nous ajoutons une méthode d'aide Html.Raw() que vous pouvez utiliser pour indiquer explicitement que vous ne veux pas encoder HTML votre sortie, et au lieu de vouloir rendre le contenu "tel quel"