2009-08-19 168 views
0

我正在寫一個ASP.NET自定義組合控件(繼承System.Web.UI.WebControls.CompositeControl)。什麼都沒有Property TagKey()

默認情況下,我的控件標記呈現由標記包圍。我知道我可以通過TagKey屬性來將返回值設置爲我想從System.Web.UI.HtmlTextWriterTag枚舉中獲得的任何標記。

我的問題:我可以讓我的控件呈現沒有.NET添加標記周圍嗎?


UPDATE(3/2/2011)Thanks Swati for your answer。我想說明我現在如何解決我的問題。我想我會整合斯瓦蒂的一些想法。具體來說,AddAttributestoRender(),但我想知道是否需要,因爲CompositeControl將缺乏父標記標記來保存屬性。

當我不想要包含標記標記時,我覆蓋CompositeControl的兩個方法&。

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

其可能擺脫與CompositeControl的含有標籤,但其針對的CompositeControl喜歡的工作方式工作(見下文)

正確的方法,顯然,以TagKey設置爲任何的你的控件的主要標籤實際上是(div,table或其他)。

然後重寫AddAttributesToRender()來設置你的包裝器標籤所需的屬性。

你想在包裝標籤內的東西應通過重寫RenderContents()方法來呈現。

的CompositeControl從Control繼承,見TagKey和的AddAttributesToRender()here.

上GeeksWithBlogs有人寫有關類似問題的用戶的討論here

先手雖然去掉包裝的,看到這個forum post,它顯示了一種重寫控件構造函數和RenderBeginTag和RenderEndTag方法來移除包裝標籤的方法。

+0

外賣點:其對CompositeControl的喜歡的工作 我不得不說,非常感謝codeulike您指出的AddAttributesToRender()的方式工作。我一直想念那個。這塊金塊是超級有用的。 請注意其他作家 - 從這篇文章學習。答案包括很大的幫助和支持鏈接! WONDERFULLY有幫助 – MADCookie 2009-08-28 19:38:25

0

難道你只是重寫Render()方法,迫使它只渲染內容?也許這樣的事情會做的伎倆:

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

利用RenderBeginTag.The「RenderBeginTag」調用其他方法,對「的AddAttributesToRender」的方法,來處理所有類型的相關開場僅標籤「屬性」的。 「TagKey」對應於Web控件對應的默認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 2011-03-02 16:04:44