Razorはデフォルトで文字列をエンコードします。エンコードなしでレンダリングするための特別な構文はありますか?
ASP.NET MVC 3以降では、次を使用できます。
@Html.Raw(myString)
@(new HtmlString(myString))
既に述べた@ Html.Raw(string)アプローチと同様に、MvcHtmlStringを出力する場合、エンコードされません。これは、独自の拡張機能をHtmlHelperに追加するとき、またはHTMLを含む可能性があることがわかっているビューモデルから値を返すときに役立ちます。
たとえば、ビューモデルが次の場合:
public class SampleViewModel
{
public string SampleString { get; set; }
public MvcHtmlString SampleHtmlString { get; set; }
}
Core 1.0+(およびMVC 5+)の場合は、HtmlStringを使用します
public class SampleViewModel
{
public string SampleString { get; set; }
public HtmlString SampleHtmlString { get; set; }
}
それから
<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>
@Html.Raw()
の使用には注意が必要です。エンコードとセキュリティにさらに問題が生じる可能性があるためです。私は自分でこれをしなければならなかったので、ユースケースを理解していますが、慎重に...すべてのテキストを許可しないようにしてください。たとえば、特定の文字シーケンスのみを保存/変換し、残りは常にエンコードします。
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
そうすれば、潜在的なセキュリティホールを作成しておらず、すべてのブラウザで特殊文字や外来文字が正しく表示されるので安心です。
ActionLinkの場合、通常、リンクテキストでHttpUtility.Encodeを使用します。その場合、HttpUtility.HtmlDecode(myString)
を使用できます。HtmlActionLinkを使用して、渡したい文字列をデコードするときに機能しました。例えば:
@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
WriteLiteralメソッドを使用することもできます
HTML RAW:
@Html.Raw(yourString)