ناکافی توضیح داده شده
. MvcHtmlString
کارش «محصور سازی» یک رشته معمولی به صورت وهلهای از کلاس HtmlString
است. چون محصور سازی شده، MSDN نوشته Html-encoded که باید مینوشت «Wraps the string in a class that implements IHtmlString»
ارائه یک رشته به صورت وهلهای از IHtmlString
سبب خواهد شد تا زمانیکه از
و یا @ استفاده میشود، از حالت HTML encoded
محافظت شود.
این
سورس 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);
}
}
}
در اینجا داریم MvcHtmlString : HtmlString
یعنی MvcHtmlString
از جنس همان HtmlString
ایی است که متدهای MvcHtmlString.Create
و Html.Raw باز میگردانند.
کاربرد MvcHtmlString
عموما در بازگرداندن مقادیر از helper methods است؛ زمانیکه میدانید خروجی آن دارای تگهای html است. مثلا قرار است یک دکمه را نمایش دهد. به این ترتیب خروجی متد از encode شدن خودکار محافظت میشود.
در MVC، سیستم خروجی، رشتههایی از جنس IHtmlString
را encode نمیکند. این بیشتر یک قرار داد است در اینجا.