DynamixCompositeControl
Definierad i Dynamix.Content5.Controls
Detta är basklassen för de flesta av Dynamix innehållskontroller. Den ärver från och har väsentligen samma funktionalitet som System.Web.UI.WebControls.CompositeControl. Funktioner som tillförs är:
Explicita klient-identifierare
Kontrollen exponerar egenskapen ExplicitClientId. Om detta värde sätts kommer kontrollen att rendera det som id-attribut istället för det hierarkiska id som genereras av .Net-ramverket.
Exempel 1: .Net-ID:
var c = new DynamixCompositeControl();
c.ID = "MyControl";
Controls.Add( c );
resulterar i (exempelvis)
<div id="uiMain_ctl00_ctl00_ctl00_MyControl">...</div>
Exempel 2: ExplicitClientId:
var c = new DynamixCompositeControl();
c.ExplicitClientId = "MyControl";
Controls.Add( c );
Id-attributet får nu exakt det värde som angivits:
<div id="MyControl">...</div>
Dynamiska css-klasser
I en del fall är det önskvärt att generera hela eller delar av class-attributet utifrån inställningar för kontrollen. DynamixCompositeControl stöder detta via den virtuella metoden GetRewrittenCssClass() som körs på CssClass innan attributet skrivs ut.
public class MyControl : DynamixCompositeControl
{
protected override string GetRewrittenCssClass( string baseCssClass )
{
if( String.IsNullOrEmpty( baseCssClass ))
{
return "";
}
return baseCssClass.Replace( "[Level]", Level.ToString() ) );
}
public int Level { get; set; }
}
...
var c = new MyControl();
c.CssClass = "TreeLevel[Level]";
c.Level = 3;
Koden kommer att rendera markup enligt:
<div class="TreeLevel3">...</div>
Omgivande markup och rendering.
Kontrollen kan användas som en panel att lägga andra kontroller i. Det går att styra under vilka omständigheter den omgivande markupen (taggen) ska renderas med hjälp av egenskapen WrappingTagRenderMode. Denna egenskap kan ha värden enligt:
WrappingTagRenderMode.Always - Den omgivande taggen renderas alltid
WrappingTagRenderMode.Never - Den omgivande taggen renderas aldrig
WrappingTagRenderMode.WhenHasSubControls - Den omgivande taggen renderas om det finns underkontroller lagda i Controls
WrappingTagRenderMode.Custom (standardläge) - Den omgivande taggen renderas beroende på värdet på egenskapen ShouldRenderWrappingTag (som är satt till true som standard).
Vilken tag som ska renderas kan sättas via en överlagrad konstruktor eller via egenskapen WrappingTag:
// Ingen tag angiven - renderas som <div>...</div>
var c = new DynamixCompositeControl();
// <p>...</p>
var c = new DynamixCompositeControl( HtmlTextWriterTag.P )
// Antingen <span>...</span> eller <div>...</div>
var c = new DynamixCompositeControl();
c.WrappingTag = this.IsInline ? HtmlTextWriterTag.Span : HtmlTextWriterTag.Div;
Ärvda kontroller som vill använda egen logik kan överlagra GetShouldRenderWrappingTag().