Привет!
У меня есть DropDownList в FormView, которые связаны с XmlDataSources:
<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 для вновь возвращаемых данных XML из GetMyXml ( ). Я посмотрел на значение «xml_data» во время обратной передачи, и это определенно правильно. Однако значения, отображаемые на странице FormView (например, XPath («SomeNode»)), являются значениями, предшествующими обратной передаче, а не значениями, возвращенными в xml_data. Почему это произойдет и как мне решить эту проблему? Заранее спасибо.