Разница между 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 &lt;b&gt;world&lt;/b&gt;

Если вы сомневаетесь, перейдите к источнику (или декомпилировать):

В 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, который вы пытаетесь вставить в него)

  1. InnerHtml. http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlcontainercontrol.innerhtml.aspx
  2. InnerText. http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlcontainercontrol.innertext.aspx
Другие вопросы по тегам