Разница между InnerHTML и InnerText свойство элементов управления ASP.Net?
Например, при использовании элементов управления ASP.NET
<h1 id="header" runat="server">text</h1>
если мы хотим изменить текст заголовка, мы можем сделать это, вероятно, двумя свойствами InnerHTML
а также InnerText
, Я хочу знать, какова основная разница между этими двумя свойствами?
3 ответа
InnerHtml
позволяет вводить HTML-код напрямую, InnerText
форматирует все, что вы вставляете туда, чтобы он воспринимался как обычный текст
Например, если вы введете это в оба свойства: Hello <b>world</b>
Вот что вы получите с InnerHTML:
Привет мир
То есть точно такой же HTML, который вы ввели.
Вместо этого, если вы используете InnerText
, вы получите это:
Hello <b>world</b>
И полученный HTML будет 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
сеттер; все заканчивается в поле зрения государства, нужно ли вам это).
InnerHtml позволяет вставлять форматированный HTML-текст в контейнер HTML, тогда как InnerText допускает только простой текст (если я правильно помню, это свойство обрезает любой тип HTML, который вы пытаетесь вставить в него)