XML 構成によって駆動されるユーザー コントロールをセットアップしています。例で説明する方が簡単です。次の構成スニペットを見てください。
<node>
<text lbl="Text:"/>
<checkbox lbl="Check me:" checked="true"/>
</node>
そのスニペットを単一のテキストボックスとチェックボックスコントロールに変換するために私が達成しようとしていること。もちろん、スニペットに含まれるノードが多ければ、より多くのコントロールが自動的に生成されます。
タスクの反復的な性質を考慮して、私は Repeater を使用することにしました。その中に、2 つの (さらに詳しくは以下を参照) コントロール、1 つの CheckBox と 1 つの Editbox を配置しました。どのコントロールをアクティブにするかを選択するために、インライン スイッチ コマンドを使用して、現在の構成ノードの名前を確認しました。
残念ながら、それはうまくいきません。問題は、データ バインディングが発生してからずっと後、レンダリング時にスイッチが実行されているという事実にあります。それだけでは問題にはなりません。構成ノードが必要な情報をデータ バインドに提供する可能性があるという事実のためではありませんでした。チェック ボックス コントロールが上記のスニペットのテキスト ノードにバインドしようとし、その "checked" 属性を必死に探したらどうなるかを考えてみてください。
これを可能にする方法はありますか?
ありがとう、ボアズ
これが私の現在のコードです:
これが私のコードです(上記よりも複雑な構文で実行されます):
<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>