MvcHtmlString.Create()和Html.Raw()之间的区别

Jul*_*ian 26 asp.net-mvc razor asp.net-mvc-4

我正在创建一个MVC项目.使用MVC 4和Razor.在构建了一些页面后,我想知道:它们之间有什么区别

MvcHtmlString.Create()
Run Code Online (Sandbox Code Playgroud)

Html.Raw()
Run Code Online (Sandbox Code Playgroud)

如果你能帮助我理解这一点,那会很好.

提前致谢!

Eri*_*kel 23

这是查看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());
}
Run Code Online (Sandbox Code Playgroud)

这是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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最重要的区别是Html.Raw()接受任何对象,而MvcHtmlString.Create()只接受字符串.此外,Html.Raw()返回一个接口,而Create方法返回一个MvcHtmlString对象.最后,Create以不同方式处理null.

  • @Julian:这取决于代码的位置以及您可以轻松访问的内容.通常我都不使用,我只使用`new HtmlString()`. (2认同)
  • @Julian像Guffa所说:这取决于你的代码在哪里.在一个视图中我更喜欢Html.Raw,但主要是因为在阅读代码时这是美观的(不是一个非常好的论据,我知道). (2认同)

Guf*_*ffa 5

没有实际的区别.

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