2012-04-26 13 views
21

Ich erstelle ein MVC-Projekt. Verwenden von MVC 4 und Razor. Nach ein paar Seiten Aufbau Ich habe mich gefragt: Was ist der Unterschied zwischenUnterschied zwischen MvcHtmlString.Create() und Html.Raw()

ist
MvcHtmlString.Create() 

und

Html.Raw() 

Wäre nett, wenn ihr mir hier helfen könnte, das zu verstehen.

Vielen Dank im Voraus!

Antwort

21

Dies ist eine hervorragende Möglichkeit, den Quellcode zu sehen, der für ASP.NET (http://aspnetwebstack.codeplex.com) verfügbar ist.

bei HtmlHelper.cs suchen, ist dies der Code für Html.Raw():

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

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

Und das ist der Code für die MvcHtmlString Klasse:

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); 
     } 
    } 
} 

Der wichtigste Unterschied besteht darin, dass Html.Raw() jeder akzeptiert Objekt, während MvcHtmlString.Create() nur Zeichenfolgen akzeptiert. Außerdem gibt Html.Raw() eine Schnittstelle zurück, während die Create-Methode ein MvcHtmlString-Objekt zurückgibt. Zuletzt beschäftigt sich die Create mit null anders.

+0

Vielen Dank für diese Antwort! Aber welche davon sollte bevorzugt werden? – Julian

+2

@Julian: Das hängt davon ab, wo der Code ist und wozu du leicht Zugang hast. Normalerweise benutze ich weder, noch benutze ich 'new HtmlString()'. – Guffa

+1

@Julian Wie Guffa sagte: Es hängt davon ab, wo dein Code ist. In einer Ansicht bevorzuge ich Html.Raw, aber hauptsächlich, weil das beim Lesen des Codes ästhetisch angenehm ist (kein wirklich gutes Argument, ich weiß). –

5

Es gibt keinen praktischen Unterschied.

Die MvcHtmlString.Create erstellt eine Instanz MvcHtmlString, während die Html.Raw Methode eine Instanz von HtmlString schafft, aber MvcHtmlString erbt nur von HtmlString, so dass sie die gleiche Arbeit.

+0

Nur eine Frage: Msdn sagt für Html.Raw(): Markup, die nicht HTML-codiert ist./für MvcHtmlString.Create: Erstellt eine HTML-codierte Zeichenfolge mit dem angegebenen Textwert. Also: codiert/nicht codiert Html macht keinen "praktischen Unterschied", oder habe ich etwas übersehen? –

+1

@ RaphaëlAlthaus: Das Ergebnis ist genau das gleiche, es wird nur anders erklärt. Wenn Sie eine Zeichenfolge in einer Klasse verpacken, die 'IHtmlString 'implementiert, wird die Zeichenfolge davor geschützt, HTML-codiert zu sein, wenn Sie sie mit dem Server-Tag' <%: %>' ausgeben. – Guffa

+0

Ich habe den letzten Punkt verpasst;) Thx! –