이스케이프 처리되지 않은 HTML 문자열 쓰기 / 출력


436

안전하고 위생적인 ​​HTML이 DB 테이블에 저장되어 있습니다.

이 HTML 컨텐츠를 Razor보기로 작성하려면 어떻게해야합니까?

항상처럼 <앰퍼샌드 와 같은 문자를 이스케이프 합니다 &amp;.


76
사람들의 토론의 오랜 역사를 구하기 위해 –@Html.Raw()
Chris S

동적 형식의보기에서 익명 형식 으로이 작업을 수행하려는 저와 같은 사람들을 구하려면이 기능이 작동하지 않습니다 .보다 구체적인 질문에 대한 답변 을 참조하십시오 . 상황에 따라 허용되는 경우 강력한 형식의보기로이 방법을 사용하는 것이 더 좋습니다.
brichins

답변:


653

콘텐츠가 mystring... 라는 문자열 안에 있다고 가정합니다 .

당신이 사용할 수있는:

@Html.Raw(mystring)

또는 문자열을 모델로 HtmlString구현 IHtmlString하거나 직접 인라인으로 사용하고 regular을 사용 하는 다른 유형으로 변환 할 수 있습니다 @.

@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString

이 답변에 감사드립니다. 내가 배우고있는 작은 일을 마치도록 도와주었습니다. :) 나는 최신 MVC3의 버전 지금까지 어떤 Html.Raw :( 사용하고 그러나

1
세르지오 안녕하세요. MVC 3을 사용하고 있으며 Raw 방법을 올바르게 사용하고 있습니다.
Gui

1
응답 해주셔서 감사합니다! 나는 여전히 MVC 3을 배우고 있으며 이것은 나를 피하고 있었다.
토드 리차드슨

3
@Lorenzo, +1 razor구문과 함께 최신 MVC 3을 사용 하고 Html.Raw있으며 확실히 사용할 수 있습니다.
Chris Snowden

1
Lorenzo, 몇 년 전과 마찬가지로 MVC Beta에 대한 언급을 제거하기 위해 답변을 업데이트했습니다. 되돌 리거나 바꿀 수 있습니다.
Alexei Levenkov

75

ASP.NET MVC 3에서는 다음과 같이해야합니다.

// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
//  Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)

13
전달 된 문자열이 null 인 경우 HTML.Raw가 폭발하기 때문에이 방법을 선호합니다.
37 별

1
고마워요, 이것은 매우 깨끗합니다!
Hajjat

64

당신이 사용할 수있는

@{ WriteLiteral("html string"); }

5
이것은 나를 위해 굉장했고 Hangfire 앱 내에서 Razor를 사용하여 이메일을 보냈습니다 ... Html.Raw()작동하지 않습니다
shanabus

WriteLiteral의 경우
muhammed 바질

11

때로는 원시 HTML을 사용하는 것이 까다로울 수 있습니다. 주로 XSS 취약점으로 인해 발생합니다. 이것이 걱정이지만 여전히 원시 HTML을 사용하려면 무서운 부분을 인코딩 할 수 있습니다.

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")

결과

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)

4

다음과 같이 컨트롤러의 문자열을 viewdata에 넣을 수 있습니다.

 ViewData["string"] = DBstring;

그런 다음 뷰 데이터를 다음과 같이 호출하십시오.

@Html.Raw(ViewData["string"].ToString())


0

RazorEngine에서 템플릿 기능을 사용하는 완전한 예 (예 : 이메일 생성) :

@model SomeModel
@{
    Func<PropertyChangeInfo, object> PropInfo =
        @<tr class="property">
            <td>
                @item.PropertyName                
            </td>
            <td class="value">
                <small class="old">@item.OldValue</small>
                <small class="new">@item.CurrentValue</small>                
            </td>
        </tr>;
}

<body>

@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }

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