Я создаю MVC-проект. Использование MVC 4 и Razor. После создания некоторых страниц мне было интересно: в чем разница между
MvcHtmlString.Create()
и
Html.Raw()
Было бы хорошо, если бы вы могли помочь мне здесь понять это.
Спасибо заранее!
Я создаю MVC-проект. Использование MVC 4 и Razor. После создания некоторых страниц мне было интересно: в чем разница между
MvcHtmlString.Create()
и
Html.Raw()
Было бы хорошо, если бы вы могли помочь мне здесь понять это.
Спасибо заранее!
Это отличная возможность посмотреть исходный код, доступный нам для 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 по-разному.
Нет никакой практической разницы.
MvcHtmlString.Create
создает экземпляр MvcHtmlString
, а метод Html.Raw
создает экземпляр HtmlString
, но MvcHtmlString
просто наследуется от HtmlString
, поэтому они работают одинаково.