【问题标题】:Difference between InnerHTML and InnerText property of ASP.Net controls?ASP.Net 控件的 InnerHTML 和 InnerText 属性之间的区别?
【发布时间】:2013-10-25 04:06:22
【问题描述】:

例如在使用 ASP.NET 控件时

<h1 id="header" runat="server">text</h1>

如果我们想改变标题的文本,我们可以通过两个属性InnerHTMLInnerText 来实现。我想知道这两个属性的基本区别是什么?

【问题讨论】:

  • @HighCore 或多或少。看我的回答。

标签: c# javascript html asp.net


【解决方案1】:

InnerHtml 让您可以直接输入 HTML 代码,InnerText 会格式化您输入的所有内容,以便将其视为纯文本。

例如,如果您要在两个属性中输入:Hello &amp;lt;b&amp;gt;world&amp;lt;/b&amp;gt;

这就是您使用 InnerHTML 会得到的:

你好世界

也就是说,与您输入的 HTML 完全相同。

相反,如果你使用InnerText,你会得到:

Hello &amp;lt;b&amp;gt;world&amp;lt;/b&amp;gt;

生成的 HTML 将是 Hello &amp;lt;b&amp;gt;world&amp;lt;/b&amp;gt;

【讨论】:

  • Innertext 在这种情况下将返回Hello world,因为它确定忽略标签的内容
  • @megawac 你确定吗?据我了解,InnerText 调用 HtmlEncode。不过,我现在无法测试它:/
  • @megawac 就像我对 andleer 说的那样,ASP.Net 中的 InnerText 和 javascript 中的 innerText 是有区别的。您引用的帖子是在谈论 JS。
  • 没关系,看起来你是对的 - 自从我使用 asp 以来,js 太多了
  • @megawac 没问题,我已经有一段时间没有在 ASP.Net 中做过任何事情了。我只记得 InnerText 在您设置它时使用了 HtmlEncode(在最后一条评论之后,我注意到 Tim Medora 在这个问题中的回答实际上具有属性的反编译源:PI 发现 InnerHTML 实际上为它找到的任何东西创建对象非常有趣那里!)
【解决方案2】:

如有疑问,请转到源代码(或反编译):

HtmlContainerControl

public virtual string InnerText
{
    get
    {
        return HttpUtility.HtmlDecode(this.InnerHtml);
    }
    set
    {
        this.InnerHtml = HttpUtility.HtmlEncode(value);
    }
}

public virtual string InnerHtml
{
    get
    {
        if (base.IsLiteralContent())
        {
            return ((LiteralControl)this.Controls[0]).Text;
        }
        if (this.HasControls() && this.Controls.Count == 1 && this.Controls[0] is DataBoundLiteralControl)
        {
            return ((DataBoundLiteralControl)this.Controls[0]).Text;
        }
        if (this.Controls.Count == 0)
        {
            return string.Empty;
        }
        throw new HttpException(SR.GetString("Inner_Content_not_literal", new object[]
        {
            this.ID
        }));
    }
    set
    {
        this.Controls.Clear();
        this.Controls.Add(new LiteralControl(value));
        this.ViewState["innerhtml"] = value;
    }
}

这两个属性最终都使用InnerHtml,但设置InnerText HTML 会对该值进行编码,使其在浏览器中按字面意思显示,而不是解释为标记。

请记住,分配给InnerHtml 不会对值进行编码,因此任何用户驱动的内容都应在分配之前进行清理。

这也强调了注意视图状态的重要性(注意InnerHtml 的设置器的最后一行;无论您是否需要,一切都以视图状态结束)。

【讨论】:

    【解决方案3】:

    InnerHtml 允许在 HTML 容器中插入 html 格式的文本,而 InnerText 只允许纯文本(如果我没记错的话,这个属性会修剪你尝试放入其中的任何类型的 html)

    1. InnerHtml。 http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlcontainercontrol.innerhtml.aspx
    2. 内部文本。 http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlcontainercontrol.innertext.aspx

    【讨论】:

      猜你喜欢
      • 2013-10-02
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      相关资源
      最近更新 更多