ご挨拶!
XmlDataSources にバインドされている FormView 内に DropDownList があります。
<asp:FormView ID="MyFormView" runat="server" DataSourceID="MyXmlDataSource">
<ItemTemplate>
<h1><%# XPath("SomeNode")%></h1>
<asp:Label ID="MyLabel" runat="server" AssociatedControlID="MyDdl" Text='<%# XPath("SomeOtherNode")%>' />
<asp:DropDownList ID="MyDdl"
runat="server"
DataSourceID="MyDdlDataSource"
DataTextField="name"
DataValueField="value"
AutoPostBack="true"
OnSelectedIndexChanged="MyDdl_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</asp:FormView>
<asp:XmlDataSource ID="MyXmlDataSource" runat="server" XPath="Root/MainSection" />
<asp:XmlDataSource ID="MyDdlDataSource" runat="server" XPath="Root/MainSection/Areas/*" />
ページの分離コードには、次の OnLoad() メソッドと、ポストバック中に選択された値のドロップダウン リストを取得するメソッドがあります。
private m_key;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
string xml_data;
if (!IsPostBack)
{
xml_data = GetMyXml(0); // default value
MyXmlDataSource.Data = xml_data;
MyDdlDataSource.Data = xml_data;
}
else
{
GetSelections();
xml_data = GetMyXml(m_key);
MyXmlDataSource.Data = xml_data;
MyXmlDataSource.DataBind();
}
}
private void GetSelections()
{
DropDownList l_MyDdl = FindMyControl<DropDownList>("MyDdl");
if (l_MyDdl != null)
if (!Int32.TryParse(l_MyDdl.SelectedItem.Value, out m_key))
m_key = 0;
}
ドロップダウン リストの変更の結果としてポストバックが発生するまで、すべてがうまく機能します。これが発生すると、ドロップダウン リストで選択した項目の値を取得し、ドロップダウン リストの値をパラメーターとして GetMyXml() メソッドに渡し、FormView のデータソースを GetMyXml( から新しく返された XML データに設定します。 )。ポストバック中に「xml_data」の値を確認しましたが、間違いなく正しいです。ただし、FormView (XPath("SomeNode") など) のページに表示される値は、ポストバックが発生する前の値であり、xml_data で返される値ではありません。なぜこれが起こるのでしょうか?どうすれば解決できますか? 前もって感謝します。