web-dev-qa-db-ja.com

エンコードなしのASP.NET MVC Razorレンダリング

Razorはデフォルトで文字列をエンコードします。エンコードなしでレンダリングするための特別な構文はありますか?

237
SiberianGuy

ASP.NET MVC 3以降では、次を使用できます。

@Html.Raw(myString)
358
Lucas
@(new HtmlString(myString))
53
Matthew Vines

既に述べた@ 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>
30

@Html.Raw()の使用には注意が必要です。エンコードとセキュリティにさらに問題が生じる可能性があるためです。私は自分でこれをしなければならなかったので、ユースケースを理解していますが、慎重に...すべてのテキストを許可しないようにしてください。たとえば、特定の文字シーケンスのみを保存/変換し、残りは常にエンコードします。

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

そうすれば、潜在的なセキュリティホールを作成しておらず、すべてのブラウザで特殊文字や外来文字が正しく表示されるので安心です。

10
Tony Wall

ActionLinkの場合、通常、リンクテキストでHttpUtility.Encodeを使用します。その場合、HttpUtility.HtmlDecode(myString)を使用できます。HtmlActionLinkを使用して、渡したい文字列をデコードするときに機能しました。例えば:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
5
gutsy_guy

WriteLiteralメソッドを使用することもできます

1
Hamid Shahid

HTML RAW:

@Html.Raw(yourString)
0
Farbod