Существует ли ASP.NET WebControl для тега<p>?

Простой вопрос, который трудно найти (поскольку основная часть вопроса состоит из одной буквы p)!

В ASP.NET <asp:Panel/> отображается как <div></div> блок, <asp:Label/> отображается как <span></span> блок... есть тот, который отображается как <p></p> блок?

Это не похоже на MSDN для класса WebControl, но я решил спросить, если пропустил что-то очевидное.

(Я понимаю, что очевидное решение состоит в том, чтобы просто использовать <p runat="server" id="p1"></p> и использовать общий класс управления HTML)

3 ответа

Решение

Нет, нет встроенного контроля специально для <p>, LiteralControl или <p runat="server" /> версия, которую вы дали, является ближайшей к вам.

Вы всегда можете создать свой собственный контроль, хотя. Вы можете создать класс, который реализует WebControlи переопределить Render метод:

protected override void Render(HtmlTextWriter output)
{
   output.WriteFullBeginTag("p");
   output.Write(this.Text);
   output.WriteEndTag("p");
}

Здесь есть дополнительные инструкции о том, как написать свой собственный серверный элемент управления:

И список всех.NET веб и серверных элементов управления здесь:

У меня была точно такая же проблема. После того, как я начал использовать подобную технику, которую использует здесь Кори, я нашел еще более простую, которая в основном делает то же самое и решает ваши проблемы. Тем не менее, он имеет одно преимущество по сравнению с решением, приведенным выше: вам не нужно передавать весь контроль самостоятельно.

В основном все, что вам нужно сделать, это следующее:

  • Создайте свой собственный элемент управления, наследуя, например, элемент управления Label.
  • Переопределить RenderBeginTag() метод.
  • Напишите свой собственный тег, например p,
  • Конечный тег будет написан автоматически.
  • Ваш новый тег теперь заменит тег по умолчанию (span в этом примере).

Смотрите код ниже:

    public class P : Label
    {
        public override void RenderBeginTag(HtmlTextWriter writer)
        {
            writer.RenderBeginTag("p");
        }
    }

Хотя нет специального класса для <p> элемент, вы можете использовать HtmlGenericControl чтобы генерировать <p> пометить как это:

var p = new HtmlGenericControl("p");
Другие вопросы по тегам