Привет!
У меня есть 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. Почему это может произойти и как мне решить эту проблему? Заранее спасибо.