2009-07-05 2 views

답변

7

은 WebControl에서 컨트롤을 파생.

0

나는 일반적으로 내 모든 복합 컨트롤이 상속하는 내 기본 클래스가 있습니다. 이 속성에 추가하는 속성 중 하나는 ContainerElement입니다. 공개적으로 노출 된 개발자는 원하는 외부 요소를 선택할 수 있습니다. 내부적으로 기본 컨트롤에서이 렌더링을 제어하는 ​​TagKey 속성을 설정합니다. 귀하의 컨트롤/기본 클래스에 대한 모든 다음.

HtmlTextWriterTag 열거 형의 모든 항목에 대한 정보가있는 HTMLContainerElement 만 설정하면됩니다.

/// <summary> 
/// Local variable for storing what the container element for the rendered control will be. 
/// </summary> 
private HtmlTextWriterTag hosTagKey = HtmlTextWriterTag.Span; 

/// <summary> 
/// HTMLContanerElement is the tag key used to set the controls outer html control which appears in the markup. 
/// The default is a span, but you can change this to be any HTML control you choose. 
/// </summary> 
public HtmlTextWriterTag HTMLContainerElement 
{ 
    get { return this.hosTagKey; } 
    set { this.hosTagKey = value; } 
} 

/// <summary> 
/// Makes it so this control is a "div" element instead of the 
/// standard "span" element. 
/// </summary> 
protected override HtmlTextWriterTag TagKey 
{ 
    get { return this.hosTagKey; } 
} 
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"> 

을 생산하는 클래스와 사업부는 ReportViewer 컨트롤을 래핑합니다. 출력물을 더 쉽게 보이게하기 위해 ID를 포함 시켰습니다.

+0

+1 오버로드 태그 키와 잘 작동합니다. – Maslow

관련 문제