使用ASP.NET控件时,例如
<h1 id="header" runat="server">text</h1>
如果我们想要更改标题的文本,我们可以通过两个属性InnerHTML
和InnerText
来完成。我想知道这两个属性之间的基本区别是什么?
答案 0 :(得分:15)
InnerHtml
可让您直接输入HTML代码,InnerText
会格式化您放置的所有内容,以便将其作为纯文本格式。
例如,如果您要在两个属性中输入此内容:Hello <b>world</b>
这是您使用InnerHTML获得的:
您好世界
即,您输入的HTML完全相同。
相反,如果你使用InnerText
,你会得到:
Hello <b>world</b>
结果HTML将为Hello <b>world</b>
答案 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)