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

Posted

技术标签:

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

例如在使用 ASP.NET 控件时

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

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

【问题讨论】:

@HighCore 或多或少。看我的回答。 【参考方案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)

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

【讨论】:

以上是关于ASP.Net 控件的 InnerHTML 和 InnerText 属性之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET,使用 .Controls.Add() 添加的控件在页面回发时丢失,如果我使用 .InnerHtml 添加它们,我无法引用它们

HTML控件 如何象一个方法 控制他隐藏或显示(asp.net)

ASP.NET用户自定义控件

通过jQuery在asp.net中存储innerhtml?

用ASP.NET怎样动态给dropdownlist控件赋值

如何在 ASP.NET 中使用 innerhtml 制作按钮事件