2009-08-19 11 views
0

Ich schreibe ein benutzerdefiniertes ASP.NET-Composite-Steuerelement (Inherits System.Web.UI.WebControls.CompositeControl).Nothing from Property TagKey()

Standardmäßig wird meine Kontrollmarkierung von Tags umgeben dargestellt. Ich weiß, dass ich die Eigenschaft TagKey überfahren kann, um die Rückgabe als beliebiges Tag festzulegen, das ich von der System.Web.UI.HtmlTextWriterTag-Enumeration erhalten möchte.

Meine Frage: Kann ich meine Steuerung rendern lassen, ohne dass .NET Markup hinzugefügt wird?


UPDATE (3/2/2011) Danke Swati für Ihre Antwort. Ich möchte zeigen, wie ich meine Frage jetzt lösen werde. Ich denke, ich werde einige Ideen von Swati integrieren. Genauer gesagt, AddAttributestoRender(), aber ich frage mich, ob dies erforderlich ist, da CompositeControl kein übergeordnetes Markup-Tag für die Attribute enthält.

Wenn ich ein enthaltenes Markup-Tag nicht möchte, überschreibe ich eine Eigenschaft & zwei Methoden von 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 

Antwort

2

Es ist möglich, mit einem Composite des mit Etikett loszuwerden, aber seine Arbeits gegen die Art und Weise Composite arbeiten mag (siehe unten)

den richtigen Weg, es scheint, zu setzen TagKey zu was auch immer dem Haupt-Tag Ihrer Kontrolle ist eigentlich (ein Div, Tabelle oder was auch immer).

Überschreiben Sie dann AddAttributesToRender(), um die gewünschten Attribute für Ihr Wrapper-Tag festzulegen.

Der Inhalt, der in den Wrapping-Tags enthalten sein soll, sollte durch Überschreiben der RenderContents() -Methode gerendert werden.

Composite von WebControl erbt, finden Sie eine Diskussion des Benutzers von TagKey und AddAttributesToRender() here.

Jemand auf GeeksWithBlogs schreibt zu einem ähnlichen Problem here

nur Um obwohl der Verpackung entfernen, sehen diese forum post zeigt eine Möglichkeit zum Überschreiben des Steuerelementkonstruktors und der RenderBeginTag- und RenderEndTag-Methoden zum Entfernen der Wrapping-Tags.

+0

Wegnahmepunkt: seine Arbeits gegen die Art und Weise Composite arbeiten mag ich für den Hinweis auf AddAttributesToRender großes DANKESCHÖN codeulike zu sagen haben(). Das habe ich vermisst. Dieses Nugget ist sehr hilfreich. Hinweis für andere Autoren - lernen Sie von diesem Beitrag. Die Antwort beinhaltete großartige Hilfe und unterstützende Links! WUNDERBAR hilfreich – MADCookie

0

Konnte man nicht einfach die Render()-Methode außer Kraft setzen und sie zwingen, nur den Inhalt zu rendern? Vielleicht so etwas wie dies tun würde, den Trick: nur die öffnenden Tags im Zusammenhang mit

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

Nutzen Sie RenderBeginTag.The „RenderBeginTag“, ruft eine andere Methode, die „AddAttributesToRender“ Methode, mit allen Arten von „Attributen“ zu behandeln . Der "TagKey" entspricht dem Standard-HTML-Tag, das dem Web-Steuerelement entspricht. Wenn wir unsere eigenen Tags innerhalb der RenderBeginn-Methode implementieren, können wir das Thema "TagKey" einfach vergessen. Sie können etwas tun ..

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

Sehr gut gesagt. Ich liebe, wie Stack Overflow neue Ansichten für sehr alte Fragen bringen kann.Danke, dass Sie sich die Zeit genommen haben, etwas zu teilen. – MADCookie