Razor로 인코딩 된 HTML 표시


79

인코딩 된 HTML을 데이터베이스에 저장합니다.

올바르게 표시 할 수있는 유일한 방법은 다음과 같습니다.

<div class='content'>    
   @MvcHtmlString.Create(HttpUtility.HtmlDecode(Model.Content));
</div>

못 생겼어. 이 작업을 수행하는 더 좋은 방법이 있습니까?

답변:


154

이 시도:

<div class='content'>    
   @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>

감사! 이것은 더 좋지만 여전히 내가 찾는 것은 아닙니다.
jani

8
이 아이디어에 따라 확장 방법을 만들었습니다. @ Html.RawDecode (Model.Content)
jani

3
그냥 피하십시오; 결국
Giovanny Farto M.

이것은 작동하지만 너무 더럽습니다 ...이 포장 된 Extention 메서드를 만드는 것으로 끝났습니다. 누군가 .Raw가 작동하지 않는 이유를 설명 할 수 있습니까?
Egli Becerra

48

사용 Html.Raw(). Phil Haack은 http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx에 멋진 구문 가이드를 게시했습니다 .

<div class='content'>
    @Html.Raw( Model.Content )
</div>

1
답장을 보내 주셔서 감사합니다. 하지만 Html.Raw ()는 '있는 그대로 표시, 인코딩하지 마십시오'라고 생각합니다. 따라서 이것을 사용하면 데이터베이스에 저장하기 전에 HTML을 디코딩 할 수 없습니다. 따라서 '보안'확인없이 사용자가 입력 한 콘텐츠를 표시합니다. 그래서 이것이 최선의 해결책이 아니라고 생각합니다.
jani

9

이것은 매우 간단합니다.

HttpUtility.HtmlDecode(Model.Content)

또 다른 솔루션은 HTMLString을 반환 할 수도 있습니다. Razor는 올바른 형식을 출력합니다.

보기 자체에서 :

@Html.GetSomeHtml()

컨트롤러에서 :

public static HtmlString GetSomeHtml()
{
    var Data = "abc<br/>123";
    return new HtmlString(Data);
}

8

단순히 HtmlString수업을 사용할 수도 있습니다.

    @(new HtmlString(Model.Content))

0

인코딩 된 HTML을 데이터베이스에 저장합니다.

Imho 데이터베이스에 HTML 인코딩 된 데이터를 저장해서는 안됩니다. 일반 텍스트 (인코딩되지 않음)로 저장하고 다음과 같이 데이터를 표시하면 html이 자동으로 인코딩됩니다.

<div class='content'>
    @Model.Content
</div>

0

백 슬래시를 표시 할 다른 케이스가 있습니다. \Razor 및 Java Script로 .

@Model.AreaName모습은 Name1 \ Name2 \ Name3 이므로 표시 할 때 모든 백 슬래시가 사라지고 Name1Name2Name3이 표시 됩니다.

해결 방법을 찾았습니다.

var areafullName =  JSON.parse("@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.AreaName)))");

페이지 @using Newtonsoft.Json상단에 추가 하는 것을 잊지 마십시오 chtml.

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