2011-02-11 7 views
21

자바 스크립트 및/또는 HTML 스 니펫을 반환하는 함수가 있습니다.면도기에서 HTML 인코딩 해제

보기에서 Razor는 대부분 HTML을 인코딩하는 것으로 생각됩니다. HTML과 자바 스크립트를 그대로 방출되도록

@StaticFunctions.SpeakEvil() 

어떻게, 면도기 하지 HTML 인코딩이 있나요, 그리고 모든 스크립트가 실제로 실행되는지?

답변

50

당신은 Raw() 기능을 사용할 수 있지만 대부분 데이터베이스에서 온 것들에 대한 의미입니다. 도우미를 들어

당신은 내가 IHtmlString 돌아 제안이 같은 : 당신이없는

static public IHtmlString SpeakEvil() { 
    return new HtmlString("<script>alert('BLAH!!');</script>"); 
} 

그런 식으로 모든 callsite에서 Raw()를 호출해야합니다.

+5

비 웹 응용 프로그램에서 RazorEngine을 사용하고 있습니다. 제안 된 솔루션 중 어느 것도 나를 위해 작동하지 않습니다. 사실 Html.Raw 메서드 호출을 통해 다음과 같은 예외가 발생했습니다. "템플릿을 컴파일 할 수 없습니다. 'Html'이름이 현재 컨텍스트에 없습니다." MvcHtmlString 또는 IHtmlString이있는 경우 텍스트를 여전히 html로 인코딩하지만 예외는 발생시키지 않습니다. –

+4

웹 응용 프로그램 외부에서 RazorEngine을 사용하고있어이 기능을 사용할 수 없습니다. (모든 아이디어? – leypascua

+0

@blesh & leypascua http://stackoverflow.com/questions/15273327/how-to-prevent- 탈출 - html-in-razor-standalone RazorEngine을 사용하는 경우이 관련 질문에서 다룹니다 : http://stackoverflow.com/questions/15273327/how-to-prevent-escaping-html-in- 면도기 - 독립 실행 형 – Ergwun

36

도우미 Html.Raw을 사용하십시오.

@Html.Raw(StaticFunctions.SpeakEvil()) 
4

돌아 가기 때문에 같은 MvcHtmlString.Create() 방법 호출하여 MvcHtmlString (HtmlString에서 상속) :

public static MvcHtmlString HtmlSafe(this string content) 
{ 
    return MvcHtmlString.Create(content); 
} 


출처 : 당신은 또한 문자열 확장으로 만들 수

public static MvcHtmlString SpeakEvil() 
{ 
    return MvcHtmlString.Create("<script>alert('BLAH!!');</script>"); 
} 


를 :
http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx

+1

Nitpick,하지만 "Is"로 시작하는 메서드를 볼 때 메서드가 질문에 응답한다고 가정합니다. 즉, IsDecimal (0m) => true입니다. –

+0

고정 :) IsHtmlSafe -> HtmlSafe – Nikkelmann