回答:
ASP.NET MVC 3以降、次のものを使用できます。
@Html.Raw(myString)
"myAttr='hello';myInt=10"
@(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/>"))
そうすれば、潜在的なセキュリティホールを作成しておらず、すべてのブラウザで特殊文字や外来文字が正しく表示されるので安心です。
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
for ASP.NET Core
"'<>etc...
これらがある場合はエスケープされます。正しい方法は、「不正な」文字を許可するMvcHtmlStringを使用することです。たとえば、モデル全体をエンコードせずにJsonデータをエンコードする場合