인코딩하지 않고 ASP.NET MVC 면도기 렌더링


답변:


374

ASP.NET MVC 3부터 다음을 사용할 수 있습니다.

@Html.Raw(myString)

8
이것은 완전히 정확하지 않습니다. 예, 원시 문자열을 삽입 할 수 있지만이 문자열 "'<>etc...이 있으면 이스케이프됩니다. 올바른 방법은 "잘못된"문자를 허용하는 MvcHtmlString을 사용하는 것입니다. 예를 들어, 당신은 JSON 데이터를 인코딩하는 경우 ... 전체 모델 인코딩없이
다니엘 B. 채프만

4
Daniel, Html.Raw () "HTML로 인코딩되지 않은 마크 업을 반환합니다."
Lucas

1
Html.Raw ()는 따옴표를 인코딩합니다."myAttr='hello';myInt=10"
Serge

4
따옴표를 인코딩하지 않습니다. "이 방법은 IHtmlString 클래스를 사용하여 HTML 마크 업을 래핑하여 인코딩되지 않은 HTML 을 렌더링합니다 ." 라는 명백한 문서 외에, 나는 이것을 테스트했으며 따옴표는 인코딩되지 않았습니다.
제임스 윌킨스


31

이미 언급 된 @ 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>

10

@Html.Raw()인코딩 및 보안에 더 많은 문제가 발생할 수 있으므로주의해서 사용하십시오 . 이 작업을 직접 수행해야하므로 사용 사례를 이해하지만 신중하게 ... 모든 텍스트를 허용하지 마십시오. 예를 들어 특정 문자 시퀀스 만 유지 / 변환하고 나머지는 항상 인코딩합니다.

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

그런 다음 잠재적 인 보안 허점을 만들지 않았으며 모든 브라우저에서 특수 / 외국 문자가 올바르게 표시됩니다.


+1 정확히 필요한 것! 문자열은 여전히 ​​인코딩해야하지만 행 리턴은 html이어야합니다. 감사!
Peter

@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))ASP.NET 코어
kenjiuno

5

ActionLink의 경우 일반적으로 링크 텍스트에 HttpUtility.Encode를 사용합니다. 이 경우 HttpUtility.HtmlDecode(myString) HtmlActionLink를 사용하여 전달하려는 문자열을 디코딩 할 때 효과적이었습니다. 예 :

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



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.