Я поддерживаю приложение для своей организации, которое использует веб-формы. Я должен добавить каскадные выпадающие списки, и мне нужно, чтобы эти раскрывающиеся списки запоминали свои значения при переходе от страницы. Мой первый раскрывающийся список запоминает его значение, но его каскадный раскрывающийся список не сохраняет своего значения при переходе назад. Есть предложения?
Ниже мои выпадающие списки:
<asp:UpdatePanel ID="updatePanel1" runat="server">
<ContentTemplate><div class="dropDownSelection">
<asp:DropDownList CssClass="topicDropDown" ID="topic1" DataTextField="NAME" DataValueField="ID" OnSelectedIndexChanged="Load_Section1" AutoPostBack="True" AppendDataBoundItems="true" runat="server"/>
<asp:DropDownList CssClass="sectionDropDown" ID="section1" DataTextField="NAME" DataValueFile="ID" AutoPostBack="True" runat="server">
<asp:ListItem Text="--- Select Section ---" Value="0"></asp:ListItem>
</asp:DropDownList></div><br/>
</ContentTemplate>
</asp:UpdatePanel>
Ниже приведены методы загрузки выпадающих значений:
protected void Load_Topic1()
{
var topicStore = new TopicStore();
var topics = topicStore.ReadTopics();
foreach (var topic in topics)
{
var topicListItem = new ListItem(topic.Name, topic.Id.ToString());
topic1.Items.Add(topicListItem);
//topic1.Attributes.Add("Title", topic.Description);//only shows description for item at the bottom of the dropdown
}
topic1.Items.Insert(0, new ListItem("--- Select Topic ---", "0"));
}
protected void Load_Section1(object sender, EventArgs e)
{
section1.Items.Clear();
var sectionStore = new SectionStore();
var sections = sectionStore.ReadForTopic(Guid.Parse(topic1.SelectedValue));
foreach (var section in sections)
{
var sectionListItem = new ListItem(section.Name, section.Id.ToString());
section1.Items.Add(sectionListItem);
}
section1.Items.Insert(0, new ListItem("--- Select Section ---", "0"));
}
Load_Topic1 вызывается при загрузке страницы. Значения раскрывающихся списков сохраняются в сеансе при переходе от страницы.
Ниже показано, как я загружаю значения в сессию:
if (Session["Page"] != null)
{
if (Session["SubmittedPayment"] != null)
{
//shazbot -- they've already hit submit
Server.Transfer("default.aspx?logout=true");
}
topic1.SelectedValue = Session["topic1"] as string;
section1.SelectedValue = Session["section1"] as string;
rating1DropDown.SelectedValue = Session["rating1DropDown"] as string;
if (Session["Page"].ToString() == "HighSchoolInformation2.aspx")
{
Session.Add("Page", "InterestSurvey.aspx");
}
else if (Session["Page"].ToString() == "Payment.aspx" || Session["Page"].ToString() == "InterestSurvey.aspx")
{
Session.Add("Page", "InterestSurvey.aspx");
}
else
{
topic1.SelectedValue = Session["topic1"] as string;
section1.SelectedValue = Session["section1"] as string;
rating1DropDown.SelectedValue = Session["rating1DropDown"] as string;
Response.Redirect(Session["Page"].ToString());
}
}
else
{
//they're not logged in, send them back to log in
Server.Transfer("Default.aspx?logout=true");
}
В коде позади я загружаю переменные сеанса следующим образом:
protected void next_Click(object sender, EventArgs e)
{
Session.Add("topic1", topic1.SelectedValue);
Session.Add("section1", section1.SelectedValue);
Session.Add("rating1DropDown", rating1DropDown.SelectedValue);
Page.Validate();
if (Page.IsValid)
{
ModLangRequired.Visible = false;
if (!checkModLang())
{
Response.Redirect("Payment.aspx");
}
}
}
Как я уже говорил, я унаследовал этот код, и у меня нет времени на полную переписку в данный момент.