When building web controls, a common scenario is how to cascade control parameters to the control from the markup (or code-behind). Within Sitecore controls this is typically the Field you want to render.
| 1 | <tc:SText runat="server" Field="Title" HideIfEmpty="true" /> | 
This approach to programming controls works very well until the set of parameters becomes very long or the control doesnt need to know about each parameter. Consider embedding a flash movie, the number of parameters to code could be huge.
In the flash example, often the parameters aren’t needed by your c# code, instead they just to be rendered to the markup.
| 1 2 3 4 5 6 7 8 9 10 | <pf:SFlash runat="server" Field="Flash Item" Width="384" Height="380">     <ParametersTemplate>         <param name="quality" value="high" />         <param name="bgcolor" value="#006699" />         ...         <param name="salign" value="" />         <param name="allowScriptAccess" value="sameDomain" />         <param name="flashVars" value='dataURL=<%= FeedUrl() %>' />     </ParametersTemplate> </pf:SFlash> | 
One useful tip is that you can get information from your code behind into the template markup eg
| 1 | <%= FeedUrl() %> | 
To build the control you need to add the following attribute:
| 1 2 | [ParseChildren(true)] public class SFlash : Control | 
And then the template you want to use:
| 1 2 3 4 5 6 7 8 | [Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty)] public virtual ITemplate ParametersTemplate {     get { return _parametersTemplate; }     set { _parametersTemplate = value; } } private ITemplate _parametersTemplate; | 
The content of the template can be extracted as a string with the following:
| 1 2 3 4 5 6 7 8 9 10 11 | PlaceHolder placeholder = new PlaceHolder(); if (ParametersTemplate != null) {     ParametersTemplate.InstantiateIn(placeholder); }    StringWriter stringWriter = new StringWriter(); HtmlTextWriter writer = new HtmlTextWriter(stringWriter); placeholder.RenderControl(writer); | 
Note, based on the chosen implementation, you may not need the content of the template as a string. Instead you could simply instantiate to the control’s child controls
Thanks for the post 🙂