Ответ 1
Как насчет этого?
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.Write("");
}
public override void RenderEndTag(HtmlTextWriter writer)
{
writer.Write("");
}
Я пишу различные элементы управления ASP.NET Server и мне нужно удалить теги, которые по умолчанию меняют мой элемент управления. Я знаю, что вы можете изменить тег на другой тег (как в этом вопросе, Как изменить поведение рендеринга моего настраиваемого элемента управления из диапазона), но как вы можете его предотвратить?
Я наследую от WebControl (также могу наследовать от CompositeControl).
Я обычно получаю:
<span>Control output</span>
Мне нужно:
Control output
Я переопределяю RenderContents (выход HtmlTextWriter) и методы CreateChildControls() (для разных элементов управления). Моя непосредственная необходимость - решить проблему, используя метод RenderContents (HtmlTextWriter).
Как насчет этого?
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.Write("");
}
public override void RenderEndTag(HtmlTextWriter writer)
{
writer.Write("");
}
Более элегантный способ сделать это - использовать contrustor WebControl (по умолчанию это вызывается с помощью HtmlTextWriterTag.Span)
public MyWebControl() : base(HtmlTextWriterTag.Div){}
и переопределить метод RenderBeginTag для добавления пользовательских атрибутов или других вещей:
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.AddAttribute("class", "SomeClassName");
base.RenderBeginTag(writer);
}
У меня была одна и та же проблема. В моем случае я переопределял методы:
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 */ }
Надеюсь, что это поможет.
Я не думаю, что принятый ответ абсолютно необходим. Я мог ошибаться, но метод render вызывает все три:
Итак, вы должны просто переопределить рендер и вручную вызвать RenderContents:
protected override void Render(HtmlTextWriter writer)
{
this.RenderContents(writer);
}
Кто-нибудь? Может быть, я что-то упустил. Я знаю, что эта ветка устарела, но в последнее время я столкнулся с этим, что выше было мое решение.