Подтвердить что ты не робот

Запретить обертывание тегов <span> для управления сервером ASP.NET

Я пишу различные элементы управления ASP.NET Server и мне нужно удалить теги, которые по умолчанию меняют мой элемент управления. Я знаю, что вы можете изменить тег на другой тег (как в этом вопросе, Как изменить поведение рендеринга моего настраиваемого элемента управления из диапазона), но как вы можете его предотвратить?

Я наследую от WebControl (также могу наследовать от CompositeControl).

Я обычно получаю:

<span>Control output</span>

Мне нужно:

Control output

Я переопределяю RenderContents (выход HtmlTextWriter) и методы CreateChildControls() (для разных элементов управления). Моя непосредственная необходимость - решить проблему, используя метод RenderContents (HtmlTextWriter).

4b9b3361

Ответ 1

Как насчет этого?

    public override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.Write("");
    }

    public override void RenderEndTag(HtmlTextWriter writer)
    {
        writer.Write("");
    }

Ответ 2

Более элегантный способ сделать это - использовать contrustor WebControl (по умолчанию это вызывается с помощью HtmlTextWriterTag.Span)

public MyWebControl() : base(HtmlTextWriterTag.Div){}

и переопределить метод RenderBeginTag для добавления пользовательских атрибутов или других вещей:

public override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.AddAttribute("class", "SomeClassName");
        base.RenderBeginTag(writer);
    }

Ответ 3

У меня была одна и та же проблема. В моем случае я переопределял методы:

protected override void OnPreRender(EventArgs e)
    { /* Insert the control stylesheet on the page */ }

и

protected override void RenderContents(HtmlTextWriter output)
        { /* Control rendering here, <span> tag will show up */ }

Чтобы предотвратить это, я просто заменил переопределение RenderContents на следующее:

protected override void Render(HtmlTextWriter output)
        { /* Control rendering, no <span> tag */ }

Надеюсь, что это поможет.

Ответ 4

Я не думаю, что принятый ответ абсолютно необходим. Я мог ошибаться, но метод render вызывает все три:

  • RenderBeginTag
  • RenderContents
  • RenderEndTag

Итак, вы должны просто переопределить рендер и вручную вызвать RenderContents:

protected override void Render(HtmlTextWriter writer)
{ 
    this.RenderContents(writer);
}

Кто-нибудь? Может быть, я что-то упустил. Я знаю, что эта ветка устарела, но в последнее время я столкнулся с этим, что выше было мое решение.