我正在创建一个MVC项目。使用MVC 4和Razor。建设一些网页后,我在想:是什么MvcHtmlString.Create()和Html.Raw()之间的差异
MvcHtmlString.Create()
和
Html.Raw()
之间的差异将是很好,如果你能帮助我在这里要理解这一点。
在此先感谢!
我正在创建一个MVC项目。使用MVC 4和Razor。建设一些网页后,我在想:是什么MvcHtmlString.Create()和Html.Raw()之间的差异
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
继承,所以他们的工作是相同的。
只是一个问题:Msdn对于Html.Raw()表示:返回非HTML编码的标记。/for MvcHtmlString.Create:使用指定的文本值创建一个HTML编码的字符串。所以:编码/未编码的Html并没有“实际的差异”,或者我错过了什么? – 2012-04-26 10:07:46
@RaphaëlAlthaus:结果完全一样,只是解释不同而已。使用'<%: %>'服务器标签输出字符串时,在实现“IHtmlString”的类中包装字符串可以保护字符串不被HTML编码。 – Guffa 2012-04-26 10:11:57
我错过了最后一点;)Thx! – 2012-04-26 10:16:25
谢谢你的回答!但是哪些应该被优先考虑? – Julian 2012-04-27 07:17:30
@Julian:这取决于代码的位置以及您轻松访问的内容。通常我都不使用,我只是使用'new HtmlString()'。 – Guffa 2012-04-27 07:26:12
@ Julian Like Guffa说:这取决于你的代码在哪里。在我看来,我更喜欢Html.Raw,但主要是因为在阅读代码时这很美观(我不知道这是一个非常好的参数)。 – 2012-04-27 09:17:11