2011-01-04 4 views
26

Razor View Engine을 사용하면 문자열을 페이지에 직접 출력 할 때마다 HTML로 인코딩됩니다. 예 :새로운 Razor View Engine을 사용하면 HtmlHelpers가 문자열 또는 IHtmlString을 반환해야합니까?

@"<p>Hello World</p>" 

실제로 페이지에 출력 얻을 것이다 :

< 페이지 > 안녕하세요 </P >

: 같은 브라우저에 표시 할

&lt;p&gt;Hello World &lt;/p&gt; 

여기에 문제가 있지만, 지금까지 html 헬퍼를 만들 때 오래된 aspx 뷰 엔진으로 retu을 할 것입니다. rn 문자열을 브라우저에 출력하십시오.

<%= Html.MyCoolHelperMethod(); %> 

제 질문은 기본적으로 다음과 같습니다. 난 그냥 내 cshtml에서이 작업을 수행 할 수 있습니다

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) 
{ 
    return new helper.Raw("<p>Hello World</p>"); 
} 

하는 경우 : :이합니까

@Html.MyCoolHelperMethod(); 

또는 나는이 않는 수행

public static string MyCoolHelperMethod(this HtmlHelper helper) 
{ 
    return "<p>Hello World</p>"; 
} 

이 경우 내가 필요 내 cshtml에서 작업을 수행하십시오 :

@Html.Raw(Html.MyCoolHelperMethod()); 

분명히 첫 번째 appro Ach는보기를 훨씬 깔끔하게 보이게하지만 실제로는 공통 패턴이 IHtmlString을 반환하는 도우미인지 아닌지 궁금해하며 과거에 잘못하고 있습니다.

+0

다음을보십시오. http://stackoverflow.com/questions/2293357/what-is-an-mvchtmlstring-and-when-should-i-use-it IHtmlString – LukLed

답변

38

대부분의 경우 IHtmlString의 인스턴스를 반환해야합니다. 이것이 헬퍼 내장형 헬퍼가 뒤 따르는 패턴이며, 도우미의 소비자가 언더 인코딩 또는 오버 인코딩에 대해 걱정할 필요가 없음을 의미합니다.

Raw 함수를 사용하는 대신 HtmlString이라는 새 인스턴스를 반환해야합니다.

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) { 
    return new HtmlString("<p>Hello World</p>"); 
} 

* MVC 3 실제로는 헬퍼의 반환 형식으로 MvcHtmlString을 사용하지만 이것은 MVC 이일에서 취한 조치입니다 있습니다. 복잡한 이야기지만 간단히 말해서 IHtmlString은 .NET 4에서만 소개되었으며 MVC 2는 .NET 3.5를 지원하기 때문에 MvcHtmlString 유형이 중간 단계로 도입되었습니다. MVC 3 이상을 타겟팅하는 모든 도우미는 IHtmlString을 반환해야합니다.

+0

"MVC 3을 대상으로하는 모든 도우미와 상위 IHtmlString 반환해야합니다. " - 내가 알 필요가있는 것! –

관련 문제