Je configure un contrôle utilisateur piloté par une configuration XML. Il est plus facile d'expliquer par l'exemple. Jetez un oeil à l'extrait de configuration suivante:Comment créer un contenu conditionnel dans une base de données Répéteur
<node>
<text lbl="Text:"/>
<checkbox lbl="Check me:" checked="true"/>
</node>
Ce que je suis en train de réaliser pour traduire cet extrait dans une seule zone de texte et un contrôle de case à cocher. Bien sûr, si l'extrait contenait plus de nœuds, plus de contrôles seraient générés automatiquement.
Donner le caractère itératif de la tâche, j'ai choisi d'utiliser le répéteur. A l'intérieur, j'ai placé deux contrôles (bien plus, voir ci-dessous), un CheckBox et un Editbox. Afin de choisir quel contrôle activer, j'ai utilisé une commande de commutateur inline, en vérifiant le nom du nœud de configuration actuel.
Malheureusement, cela ne fonctionne pas. Le problème réside dans le fait que le commutateur est en cours d'exécution pendant le temps de rendu, longtemps après que la liaison de données s'est produite. Cela seul ne serait pas un problème, n'était pas le fait qu'un nœud de configuration pourrait offrir les informations nécessaires à la liaison de données. Considérez ce qui se passerait si le contrôle de case à cocher essayait de se lier au nœud de texte dans l'extrait ci-dessus, cherchant désespérément son attribut "checked".
Des idées pour rendre cela possible?
Merci, Boaz
Voici mon code actuel:
Voici mon code (qui fonctionne sur une syntaxe plus complexe que celle ci-dessus):
<asp:Repeater ID="settingRepeater" runat="server">
<ItemTemplate>
<%
switch (((XmlNode)Page.GetDataItem()).LocalName)
{
case "text":
%>
<asp:Label ID="settingsLabel" CssClass="editlabel" Text='<%# XPath("@lbl") %>' runat="server" />
<asp:TextBox ID="settingsLabelText" Text='<%# SettingsNode.SelectSingleNode(XPath("@xpath").ToString()).InnerText %>'
runat="server" AutoPostBack="true" Columns='<%# XmlUtils.OptReadInt((XmlNode)Page.GetDataItem(),"@width",20) %>'
/>
<% break;
case "checkbox":
%>
<asp:CheckBox ID="settingsCheckBox" Text='<%# XPath("@lbl") %>' runat="server"
Checked='<%# ((XmlElement)SettingsNode.SelectSingleNode(XPath("@xpath").ToString())).HasAttribute(XPath("@att").ToString()) %>'
/>
<% break;
} %>
</ItemTemplate>
</asp:Repeater>