2012-04-26 4 views
21

MVC 프로젝트를 만들고 있습니다. MVC 4와 면도기 사용하기. 일부 페이지를 구축 한 후 궁금 해서요 : 당신이 이해 여기 좀 도와 수 있다면 좋겠지MvcHtmlString.Create()와 Html.Raw()의 차이점

MvcHtmlString.Create() 

Html.Raw() 

의 차이가 무엇인지.

미리 감사드립니다.

답변

21

이것은 ASP.NET (http://aspnetwebstack.codeplex.com)에서 사용할 수있는 소스 코드를 살펴볼 수있는 좋은 기회입니다.

HtmlHelper.cs 보면

,이 Html.Raw() 코드입니다 :

public IHtmlString Raw(string value) 
{ 
    return new HtmlString(value); 
} 

public IHtmlString Raw(object value) 
{ 
    return new HtmlString(value == null ? null : value.ToString()); 
} 

그리고 이것은 MvcHtmlString 클래스의 코드입니다 :

namespace System.Web.Mvc 
{ 
    public sealed class MvcHtmlString : HtmlString 
    { 
     [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes", Justification = "MvcHtmlString is immutable")] 
     public static readonly MvcHtmlString Empty = Create(String.Empty); 

     private readonly string _value; 

     public MvcHtmlString(string value) 
      : base(value ?? String.Empty) 
     { 
      _value = value ?? String.Empty; 
     } 

     public static MvcHtmlString Create(string value) 
     { 
      return new MvcHtmlString(value); 
     } 

     public static bool IsNullOrEmpty(MvcHtmlString value) 
     { 
      return (value == null || value._value.Length == 0); 
     } 
    } 
} 

가장 큰 차이는 Html.Raw() 어떤을 허용한다는 것입니다 객체 인 반면 MvcHtmlString.Create()은 문자열 만 허용합니다. 또한 Html.Raw()은 인터페이스를 반환하고 Create 메서드는 MvcHtmlString 객체를 반환합니다. 마지막으로 Create는 null을 다르게 처리합니다.

+0

그 해답을 가져 주셔서 감사합니다! 그러나 이것들 중 어느 것을 선호해야합니까? – Julian

+2

@Julian : 코드가 어디에 있고 쉽게 액세스 할 수 있는지에 따라 다릅니다. Ususally 나는 둘 다 사용하지 않고 단지'new HtmlString()'을 사용한다. – Guffa

+1

@Julian Like Guffa said : 코드가 어디에 있느냐에 따라 다릅니다. 보기에서 나는 Html.Raw를 선호하지만, 주로 코드를 읽을 때 심미적으로 기쁘기 때문에 (정말 좋은 주장이 아닙니다.) 알고 있습니다. –

5

실용적인 차이점이 없습니다. Html.Raw 방법 HtmlString의 인스턴스를 생성하지만 단지 MvcHtmlStringHtmlString 계승하면서 MvcHtmlString.Create

MvcHtmlString의 인스턴스를 생성되므로 동일한 작업.

+0

그냥 질문 : Msdn에 대한 Html.Raw() : HTML 인코딩되지 않은 마크 업을 반환합니다./for MvcHtmlString.Create : 지정된 텍스트 값을 사용하여 HTML 인코딩 된 문자열을 만듭니다. 그래서 : encoded/not encoded HTML은 "실질적인 차이"를 만들지 않습니까? –

+1

@ RaphaëlAlthaus : 결과는 똑같습니다. 다르게 설명되었습니다. 'IHtmlString'을 구현 한 클래스에서 문자열을 감싸는 것은'<%: %>'서버 태그를 사용하여 출력 할 때 문자열이 HTML로 인코딩되지 않도록 보호합니다. – Guffa

+0

나는 마지막 포인트를 놓쳤다;) Thx! –