例如,在使用 ASP.NET 控件时
<h1 id="header" runat="server">text</h1>
如果我们想更改标题的文本,我们可以通过两个属性InnerHTML
和InnerText
. 我想知道这两个属性之间的基本区别是什么?
例如,在使用 ASP.NET 控件时
<h1 id="header" runat="server">text</h1>
如果我们想更改标题的文本,我们可以通过两个属性InnerHTML
和InnerText
. 我想知道这两个属性之间的基本区别是什么?
InnerHtml
lets you enter HTML code directly, InnerText
formats everything you put in there for it to be taken as plain text.
For example, if you were to enter this in both properties: Hello <b>world</b>
This is what you would get with InnerHTML:
Hello world
That is, exactly the same HTML you entered.
Instead, if you use InnerText
, you get this:
Hello <b>world</b>
And the resulting HTML would be Hello <b>world</b>
如有疑问,请转到源代码(或反编译):
在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
's setter 的最后一行;无论您是否需要,一切都以视图状态结束)。
InnerHtml 允许在 HTML 容器中插入 html 格式的文本,而 InnerText 只允许纯文本(如果我没记错的话,此属性会修剪您尝试放入其中的任何类型的 html)