all groups > asp.net building controls > january 2006 >
You're in the

asp.net building controls

group:

Template control not displaying Container properties


Template control not displaying Container properties fusionmaster
1/24/2006 6:12:02 AM
asp.net building controls:
I am trying to create a templated control for asp.net 2.0 using the example
found in the documentation, however when outputing <%# Container.Message %>
it always returns an empty string. Please help.


control code:

using System;
using System.Web;
using System.Web.UI;

namespace TemplateControlSamples
{

public class TemplateItem : Control, INamingContainer
{
private String _message = null;

public TemplateItem(String message)
{
_message = message;
}

public String Message
{

get
{
return _message;
}
set
{
_message = value;
}
}
}

[
ParseChildren(true)
]
public class Template1 : Control, INamingContainer
{

private ITemplate _messageTemplate = null;
private String _message = null;

public String Message
{

get
{
return _message;
}
set
{
_message = value;
}
}

[
PersistenceMode(PersistenceMode.InnerProperty),
TemplateContainer(typeof(TemplateItem))
]
public ITemplate MessageTemplate
{
get
{
return _messageTemplate;
}
set
{
_messageTemplate = value;
}
}

protected override void CreateChildControls()
{

// If a template has been specified, use it to create children.
// Otherwise, create a single literalcontrol with message value

if (_messageTemplate != null)
{
Controls.Clear();
TemplateItem i = new TemplateItem("this is a test");
_messageTemplate.InstantiateIn(i);
Controls.Add(i);
}
else
{
this.Controls.Add(new LiteralControl(this.Message));
}
}
}
}


asp code:

<%@ Register TagPrefix="test" Namespace="TemplateControlSamples" %>
<test:Template1 ID="Template1_1" Message="Hello World!" runat=server>
<MessageTemplate>
[<%# Container.Message %>]
</MessageTemplate>
</test:Template1>


the output to the browser is always []
Re: Template control not displaying Container properties Fredrik_=D6rvill
2/1/2006 9:01:15 AM
You must do databind to get your databinding statements (<%# %>) to get
their values. After you add your Templated item to the page, do a
i=2EDataBind(). Like this:

if (_messageTemplate !=3D null)
{
Controls.Clear();
TemplateItem i =3D new TemplateItem("this is a test");
_messageTemplate.InstantiateIn(i);
Controls.Add(i);
i.DataBind();
}
else
{
this.Controls.Add(new LiteralControl(this.Message));
}

regards
/=D6rvill
AddThis Social Bookmark Button