2012-10-05 15 views
26

私はMVC 3とAsp.net C#でRazorを使用しています。MVC 3 RazorでデコードされたエンコードされたHTMLを表示するには?

私は次のコードを持つビューを持っています。 model.ContentBodyにはいくつかのHTMLタグがあります。

デコードとしてこのHTMLコンテンツを表示する必要があります。

ビューでコードを変更するにはどうすればよいですか?

<div class="display-field"> 
     @Html.DisplayFor(model => model.ContentBody) 
</div> 

答えて

68
<div class="display-field"> 
    @Html.Raw(Model.ContentBody) 
</div> 

このコードは、問題を解決しました!

+4

あなたは1つに注意してくださいしたいと思う、それは盲目的にテキストを信頼し、文字列としてページにそれを置きます。 Model.ContentBodyが '

+0

と同じであった場合はどうでしょうか? –

+0

@Andy Raddatzさん、あなたのヒントのおかげで、私のケースではすべてのコンテンツがデータベースから浄化され、安全です。 – GibboK

34

@Html.Rawは、ここでは私のために働くされなかった例である: -

string name = "&lt;p&gt;&lt;span style=&quot;font-size: small; color: #ff0000;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-size: large; color: #000000;&quot;&gt;Hi&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;This is just a sample,&lt;br /&gt;This will not work with @Html.Raw(),&lt;br /&gt;"; 
    <span>@Html.Raw(name);</span> 

しかし、これは代わりに働いていた: -

@MvcHtmlString.Create(HttpUtility.HtmlDecode(@model.ContentBody)) 

か、も使用することができます: -

@Html.Raw(HttpUtility.HtmlDecode(@model.ContentBody)); 
+0

それは本当に冗長で、なぜちょうどHtml.Rawを使用しないように見えますか? – GibboK

+1

@GibboK 'MvcHtmlString.Create()'は、より意味のあるIMOですが、どちらの解決策でもうまくいくでしょう。 –

+0

私はあなたと同じ問題に直面しています。 – Rajpurohit

0

パスMvcHtmlStringとして "ContentBody"に文字列の代わりにモデルを追加します。

この方法で、あなただけ使用することができます。

<div class="display-field"> 
     @model.ContentBody 
</div> 

をお使いのコントローラでMvcHtmlStringを取得するだけで使用します。

MvcHtmlString myHtmlString = MvcHtmlString.Create("htmlcodeandtext"); 
5

ます。また、コントローラにHTMLをデコードすることができビューにモデルを送信する前に、

WebUtility.HtmlDecode()

public ActionResult Index(int id) 
    { 
     var content = _contentRepository.GetContent(id); 
     var classViewModel = new ClassViewModel 
           { 
            ContentBody = WebUtility.HtmlDecode(ClassViewModel.ContentBody) 
           }; 
     return View(classViewModel); 
    } 
1

デコードを伴うHTMLの使用を表示するために使用してください。

@MvcHtmlString.Create(@Model.OurVision) 
-4

コントローラでこのコードを使用します。

string noHTML = Regex.Replace(inputHTML, @"<[^>]+>|&nbsp;", "").Trim(); 
関連する問題