2010-12-14 16 views
1

私が作成したこの拡張メソッドは、データベース内のすべてのカテゴリの文字列をハイパーリンクとして返します。すばらしいです!ブラウザに文字列を表示させ、表示しないようにするには

@Html.MyMenu() 

問題は、リンクがテキストとして表示されており、ハイパーリンクとしてレンダリングされていないことです。

<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> 

は私が間違っているかもしれないと思うが、私はMVC2に(デフォルトのビューエンジンを使用して)ことを覚えて、あなたが持っていた:ソースコードを表示する場合

私が見

<%: this is rendered, right? %> 

またはAM私は間違っている?とにかく、MVC3とRazorエンジンを使用しています。あなたの助けを借りてくれてありがとう。私はこれについて、できるだけ多くのことを学んでいます。

+0

ビューにコードが必要な場合は教えてください。ありがとう! –

答えて

2

RazorはデフォルトでHTMLをエスケープします。うまく

Writing/outputting HTML strings unescaped

+0

ありがとう、これは私の問題を解決するのに役立ちました。ここに私の解決策があります:@(新しいHtmlString(@ Html.MyMenu())) –

+0

しかし、 'Html.MyMenu()'に 'HtmlString'を返すこともできます!あなたが通常の文字列を返す必要がある場合を除いて(例えば、別の場所でそれを再利用するため)。 – rsenna

0

あなたの拡張メソッドはすべて、それが文字列を返す場合、適切<%: %>を使用して、あなたのページに表示するためにMvcHtmlStringを返すべきである。それを避けるために

は、このような何かをしてください山括弧やその他のhtml特殊文字はhtmlエンコードされます。

+0

私は達成しようとしていることを説明するために括弧のみを述べました。 Razorエンジンでは、MVC2の角括弧は使用できません。 –

1

RC2では、@ HTml.Rawという新しいメソッドが必要です。

また、文字列ではなく、HtmlStringまたはMvcStringを返すようにMyMenuを変更することもできます。

+0

MSDNでこのメソッドが見つかりません。Googleは結果を返しません。リンクを共有できますか? –

+0

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

0

RC2は、我々はあなたが明示的にことを示すために使用することができますHtml.Raw()ヘルパーメソッドを追加しているRC2でScott Guthrie's RC2 anouncement

から出力生のHTML

にHtml.Raw()@サポートしていますHTMLエンコードして出力しないで、代わりにコンテンツをそのまま表示したい場合

関連する問題