Запретить перенос тегов <span>для управления сервером ASP.NET - PullRequest
22 голосов
/ 30 сентября 2010

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

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

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

<span>Control output</span>

Мне нужно:

Control output

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

Ответы [ 4 ]

39 голосов
/ 30 сентября 2010

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

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

    public override void RenderEndTag(HtmlTextWriter writer)
    {
        writer.Write("");
    }
3 голосов
/ 25 января 2013

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

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

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

public override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.AddAttribute("class", "SomeClassName");
        base.RenderBeginTag(writer);
    }
2 голосов
/ 06 декабря 2013

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

protected override void OnPreRender(EventArgs e)
    { /* Insert the control's 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 */ }

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

1 голос
/ 18 апреля 2016

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

  • RenderBeginTag
  • RenderContents
  • RenderEndTag

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...