2012-04-26 65 views

回答

21

这是一个很好的机会来看看我们为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。

+0

谢谢你的回答!但是哪些应该被优先考虑? – Julian 2012-04-27 07:17:30

+2

@Julian:这取决于代码的位置以及您轻松访问的内容。通常我都不使用,我只是使用'new HtmlString()'。 – Guffa 2012-04-27 07:26:12

+1

@ Julian Like Guffa说:这取决于你的代码在哪里。在我看来,我更喜欢Html.Raw,但主要是因为在阅读代码时这很美观(我不知道这是一个非常好的参数)。 – 2012-04-27 09:17:11

5

没有实际区别。

MvcHtmlString.Create创建的MvcHtmlString一个实例,而Html.Raw方法创建的HtmlString的实例,但MvcHtmlString刚刚从HtmlString继承,所以他们的工作是相同的。

+0

只是一个问题:Msdn对于Html.Raw()表示:返回非HTML编码的标记。/for MvcHtmlString.Create:使用指定的文本值创建一个HTML编码的字符串。所以:编码/未编码的Html并没有“实际的差异”,或者我错过了什么? – 2012-04-26 10:07:46

+1

@RaphaëlAlthaus:结果完全一样,只是解释不同而已。使用'<%: %>'服务器标签输出字符串时,在实现“IHtmlString”的类中包装字符串可以保护字符串不被HTML编码。 – Guffa 2012-04-26 10:11:57

+0

我错过了最后一点;)Thx! – 2012-04-26 10:16:25