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>
如果我们想改变标题的文本,我们可以通过两个属性Innerhtml
和InnerText
来实现。我想知道这两个属性的基本区别是什么?
【问题讨论】:
@HighCore 或多或少。看我的回答。 【参考方案1】:InnerHtml
让您可以直接输入 HTML 代码,InnerText
会格式化您输入的所有内容,以便将其视为纯文本。
例如,如果您要在两个属性中输入:Hello &lt;b&gt;world&lt;/b&gt;
这就是您使用 InnerHTML 会得到的:
你好世界
也就是说,与您输入的 HTML 完全相同。
相反,如果你使用InnerText
,你会得到:
Hello &lt;b&gt;world&lt;/b&gt;
生成的 HTML 将是 Hello &lt;b&gt;world&lt;/b&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 添加它们,我无法引用它们