J'essaie d'ajouter un modèle à un contrôle composite simplifié contenant un label et un TextBox. Je veux que ma marque à ressembler à quelque chose comme ceci:Comment puis-je avoir un contrôle composite basé sur un modèle ASP.NET?
<test:FormItem ID="fi" runat="server" Title="MyTitle" Text="My Text!">
<TestTemplate>
<i>
<%# Container.Title) %></i>
<br />
<%# Container.Text %>
</TestTemplate>
</test:FormItem>
J'ai une classe templateContainer qui a des propriétés pour la zone de texte et de l'étiquette.
public class TemplateContainer : WebControl, INamingContainer
{
public TextBox Text { get { return m_item.Text; } }
public Label Title { get { return m_item.Title; } }
private FormItem m_item;
public TemplateContainer(FormItem item)
{
m_item = item;
}
}
Dans la classe principale FormItem J'ai une méthode CreateControlHierarchy() qui est appelé à partir CreateChildControls():
protected virtual void CreateControlHierarchy()
{
m_itemTemplateContainer = new TemplateContainer(this);
TestTemplate.InstantiateIn(m_itemTemplateContainer);
Controls.Add(m_itemTemplateContainer);
}
Ce que je veux pour le modèle de rendre le contrôle effectif. Au lieu de cela, il appelle ToString() sur le contrôle et affiche System.Web.UI.WebControls.Label et System.Web.UI.WebControls.TextBox. Est-il possible de faire en sorte que le modèle ajoute les contrôles à sa collection au lieu de simplement appeler ToString() sur eux?
Remarque: J'ai également essayé d'ajouter la zone de texte et l'étiquette à la collection de contrôles du conteneur qui fait la même chose.
Je souhaite créer un contrôle composite (contrôle des contrôles) et permettre à l'utilisateur d'ajouter un balisage autour des contrôles. Remarque: je ne souhaite pas créer de UserControl. J'ai une logique personnalisée pour les contrôles dans le contrôle composite et je veux l'utiliser dans toutes les applications. – rmw
Les utilisateurs doivent-ils être en mesure de déplacer les contrôles eux-mêmes, ou simplement être en mesure de placer un balisage avant et après? – codemonkeh