2009-08-19 7 views
0

ASP.NET 사용자 지정 합성 컨트롤 (Inherits System.Web.UI.WebControls.CompositeControl)을 작성하고 있습니다.Nothing from Property TagKey()

기본적으로 내 제어 마크 업은 태그로 둘러싸인 렌더링입니다. 나는 System.Web.UI.HtmlTextWriterTag 열거 형에서 원하는 태그로 반환 값을 설정하기 위해 TagKey 속성을 사용할 수 있음을 알고 있습니다.

내 질문 : .NET에서 주위에 마크 업을 추가하지 않고 컨트롤을 렌더링 할 수 있습니까?


업데이트 (3/2/2011) 답변을 주셔서 감사합니다. 나는 지금 어떻게 나의 질문을 해결하고 있는지 보여주고 싶다. Swati의 아이디어 중 일부를 통합 할 것입니다. 특히, AddAttributestoRender(),하지만 그 CompositeControl 속성을 보유하는 부모 마크 업 태그가 부족하기 때문에 필요한 경우 궁금하네요.

마크 업 태그를 포함하고 싶지 않으면 하나의 속성을 오버라이드합니다. & CompositeControl의 두 가지 메소드. CompositeControl과 함께 포함 된 태그를 제거하지만, CompositeControl이 일을 좋아하는 방법에 대하여 그것의 작업 명백하게에 TagKey을 설정,

적절한 방법 (아래 참조)하기가

Protected Overrides ReadOnly Property TagKey() As System.Web.UI.HtmlTextWriterTag 
    Get 
     ' System defaults return as HtmlTextWriterTag.Span 
     Return HtmlTextWriterTag.Unknown 
    End Get 
End Property 

Public Overrides Sub RenderBeginTag(ByVal writer As System.Web.UI.HtmlTextWriter) 
    If Me.TagKey <> HtmlTextWriterTag.Unknown Then 
     MyBase.RenderBeginTag(writer) 
    End If 
End Sub 

Public Overrides Sub RenderEndTag(ByVal writer As System.Web.UI.HtmlTextWriter) 
    If Me.TagKey <> HtmlTextWriterTag.Unknown Then 
     MyBase.RenderBeginTag(writer) 
    End If 
End Sub 

답변

2

그 수에 상관없이 귀하의 컨트롤의 메인 태그는 실제로 (div, 테이블, 또는 무엇이든)입니다.

그런 다음 AddAttributesToRender()를 재정 의하여 래퍼 태그에 원하는 특성을 설정하십시오.

래핑 태그 내부에서 원하는 내용은 RenderContents() 메소드를 재정 의하여 렌더링해야합니다. CompositeControl이 WebControl에서 상속

는 TagKey 및 AddAttributesToRender() here.

GeeksWithBlogs에 누군가가 유사한 문제에 대한 기록의 사용자의 설명을 참조 here

그냥하지만 ​​포장을 제거하려면

이 참조 컨트롤 생성자와 RenderBeginTag 및 RenderEndTag 메서드를 재정의하여 래핑 태그를 제거하는 방법을 보여주는 forum post

+0

테이크 어웨이 점 : CompositeControl 내가() AddAttributesToRender을 지적 당신이 codeulike 큰 감사의 말을해야 일을 좋아하는 방법에 대하여 그것의 작업을. 나는 그것을 놓쳤다. 이 너겟은 매우 유용합니다. 다른 작가에 대한 정보 -이 게시물에서 알아보십시오. 대답은 큰 도움 및 지원 링크가 포함되었습니다! 이상하게도 도움이된다 – MADCookie

0

Render() 메서드를 재정 의하여 그냥 내용 만 렌더링 할 수는 없습니까?

public override void Render(HtmlTextWriter writer) 
{ 
    RenderContents(writer); 
} 
1

이 RenderBeginTag.The "에 RenderBeginTag"의 만들기 사용은 오프닝 태그와 관련된 "속성"의 모든 유형을 다루는 또 다른 방법은 "AddAttributestoRender"메서드를 호출 : 어쩌면이 같은 트릭을 할 것입니다 . "TagKey"는 웹 컨트롤에 해당하는 기본 HTML 태그에 해당합니다. "RenderBegintag"메서드 내에서 자체 태그를 구현하면 "TagKey"문제를 잊을 수 있습니다. 당신이 뭔가를 할 수 있습니다 ..

Public virtual void RenderBeginTag(HtmlTextWriter Writer) 
{ 
    AddAttributestoRender(writer); 
    HtmlTextWriterTag tagKey = TagKey; 
    If(tagKey != HtmlTextWriterTag.Unknown) 
    Writer.RenderBeginTag(tagKey); 
    Else 
    Writer.RenderBeginTag(this.tagName); 
} 
+0

아주 잘했다. Stack Overflow가 매우 오래된 질문에 대한 신선한 시각을 가져올 수있는 방법을 좋아합니다.공유 할 시간을내어 주셔서 감사합니다. – MADCookie