Esta es una excelente oportunidad para ver el código fuente que está disponible para ASP.NET (http://aspnetwebstack.codeplex.com).
En cuanto a HtmlHelper.cs, este es el código de Html.Raw()
:
public IHtmlString Raw(string value)
{
return new HtmlString(value);
}
public IHtmlString Raw(object value)
{
return new HtmlString(value == null ? null : value.ToString());
}
Y este es el código de la clase 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);
}
}
}
La diferencia más significativa es que acepta cualquier Html.Raw()
objeto, mientras que MvcHtmlString.Create()
solo acepta cadenas. Además, Html.Raw()
devuelve una interfaz, mientras que el método Create devuelve un objeto MvcHtmlString. Por último, Create genera null de manera diferente.
¡Gracias por esa respuesta! Pero, ¿cuál de estos debería ser preferido? – Julian
@Julian: Eso depende de dónde está el código y a qué tiene acceso fácilmente. Ususally no uso ninguno, solo uso 'new HtmlString()'. – Guffa
@Julian Like Guffa dijo: Depende de dónde está tu código. En una vista, prefiero Html.Raw, pero principalmente porque es estéticamente agradable cuando leo el código (no es un argumento realmente bueno, lo sé). –