2009-07-05 2 views

ответ

7

Выведите свой контроль от WebControl следующим образом:

public class MyCustomControl : WebControl { 
    public MyCustomControl() : base(HtmlTextWriterTag.Div) {} 
} 

То есть, использовать конструктор базового класса, который принимает метку для использования.

0

Обычно у меня есть собственный базовый класс, на который наследуются все мои составные элементы управления. Одним из свойств, которые я добавляю к этому, является ContainerElement. Публично разоблаченный разработчик может выбрать, какой из внешних элементов они хотят. Внутри он устанавливает свойство TagKey, которое управляет этим рендерингом на базовом элементе управления. Все следующее к вашему классу control/base.

Вам просто нужно установить HTMLContainerElement, который будет иметь интеллектуальную помощь всех элементов в перечислении HtmlTextWriterTag.

3

Если вы вышли из CompositeControl, конструктор не принимает тип тега. Вы можете переопределить TagKey (я его не пробовал), но более гибкая опция - переопределить метод RenderBeginTag и заставить его делать то, что вы хотите. Базовый класс создает элемент открытия «span», но вам не нужно вызывать метод базового класса. Вам не нужно ничего называть, если вы не хотите ничего визуализированного (в этом случае также переопределите RenderEndTag и не называть ничего там). Например,

public override void RenderBeginTag(HtmlTextWriter writer) 
    { 
     writer.AddAttribute(HtmlTextWriterAttribute.Class, "reportViewer"); 
     writer.AddAttribute(HtmlTextWriterAttribute.Id, "QueryViewerWrapper"); 
     writer.RenderBeginTag(HtmlTextWriterTag.Div); 
    } 

Этот код производит

<div class="reportViewer" id="QueryViewerWrapper"> 

который именно то, что мне нужно для этого конкретного составного элемента управления шахты, DIV с классом, чтобы обернуть контроль ReportViewer. Я включаю идентификатор, чтобы сделать вывод легче.

+0

+1 overrode tagKey и он хорошо работает – Maslow

Смежные вопросы