ASP.Net控件的InnerHTML和InnerText属性之间的区别?

时间:2013-10-16 20:51:28

标签: c# javascript html asp.net

使用ASP.NET控件时,例如

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

如果我们想要更改标题的文本,我们可以通过两个属性InnerHTMLInnerText来完成。我想知道这两个属性之间的基本区别是什么?

3 个答案:

答案 0 :(得分:15)

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

例如,如果您要在两个属性中输入此内容:Hello <b>world</b>

这是您使用InnerHTML获得的:

  

您好世界

即,您输入的HTML完全相同。

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

  

Hello <b>world</b>

结果HTML将为Hello &lt;b&gt;world&lt;/b&gt;

答案 1 :(得分:1)

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

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的setter的最后一行;一切都以视图状态结束,无论你是否需要它。)

答案 2 :(得分:0)

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

  1. 的innerHTML。 http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlcontainercontrol.innerhtml.aspx
  2. 的innerText。 http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlcontainercontrol.innertext.aspx