Как сохранить значение Dropdownlist одинаковым после обновления страницы
Я использую три выпадающих списка, в первом выпадающем списке я связываю данные из sql. Во втором выпадающем списке я также связываю данные из sql, а третий выпадающий список привязывается в соответствии со вторым выпадающим списком, поэтому во втором выпадающем списке есть свойство autopostback true. У меня есть одна кнопка поиска, которая извлекает результат из базы данных по щелчку мыши.
Я хочу сохранить все значения выпадающего списка одинаковыми после того, как мой результат будет показан на странице. Одна вещь, которую я сделал, это то, что в момент нажатия кнопки я делаю сеанс и проверяю его при загрузке страницы, когда он не равен нулю, привязывая значение выпадающего списка. До этого момента он работает нормально, я могу привязать выбранные значения prevoius.
Это находится на моей главной странице, и результат отображается на странице результатов, которая использует эту главную страницу.
aspx :
<asp:DropDownList ID="dd_category" runat="server" AutoPostBack="True" onselectedindexchanged="dd_category_SelectedIndexChanged"> </asp:DropDownList> <asp:DropDownList ID="dd_subcategory" runat="server" ></asp:DropDownList> <asp:Button ID="but_go" runat="server" Text="Go" onclick="but_go_Click"/>
загрузка страниц :
if (!IsPostBack) { FillStates(); FillCategory(); } if (Session["state"] != null) { dd_state.SelectedValue = (string) Session["state"]; }
aspx-файл.в CS :
private void FillStates() { SqlCommand cmd = new SqlCommand("sps_bindcountrystate", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@flag", 2); cmd.Parameters.AddWithValue("@CountryID", 1); DataSet objDs = new DataSet(); SqlDataAdapter dAdapter = new SqlDataAdapter(); dAdapter.SelectCommand = cmd; con.Open(); dAdapter.Fill(objDs); con.Close(); if (objDs.Tables[0].Rows.Count > 0) { dd_state.DataSource = objDs.Tables[0]; dd_state.DataTextField = "s_name"; dd_state.DataValueField = "s_id"; dd_state.DataBind(); dd_state.Items.Insert(0, "Select State"); } } protected void dd_category_SelectedIndexChanged(object sender, EventArgs e) { int CategoryID = Convert.ToInt32(dd_category.SelectedValue); FillSubCategory(CategoryID); } private void FillCategory() { SqlCommand cmd = new SqlCommand("sps_bindcategory", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@flag", 1); cmd.Parameters.AddWithValue("@CategoryID", 0); DataSet objDs = new DataSet(); SqlDataAdapter dAdapter = new SqlDataAdapter(); dAdapter.SelectCommand = cmd; con.Open(); dAdapter.Fill(objDs); con.Close(); if (objDs.Tables[0].Rows.Count > 0) { dd_category.DataSource = objDs.Tables[0]; dd_category.DataTextField = "category_name"; dd_category.DataValueField = "category_id"; dd_category.DataBind(); dd_category.Items.Insert(0, "Select Category"); dd_subcategory.Items.Insert(0, "Select Sub-Category"); } } private void FillSubCategory(int CategoryID) { SqlCommand cmd = new SqlCommand("sps_bindcategory", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@flag", 2); cmd.Parameters.AddWithValue("@CategoryID", CategoryID); DataSet objDs = new DataSet(); SqlDataAdapter dAdapter = new SqlDataAdapter(); dAdapter.SelectCommand = cmd; con.Open(); dAdapter.Fill(objDs); con.Close(); if (objDs.Tables[0].Rows.Count > 0) { dd_subcategory.DataSource = objDs.Tables[0]; dd_subcategory.DataTextField = "subcategory_name"; dd_subcategory.DataValueField = "subcategory_id"; dd_subcategory.DataBind(); dd_subcategory.Items.Insert(0, "Select Sub-Category"); } } protected void but_go_Click(object sender, EventArgs e) { Session["state"] = dd_state.SelectedValue; Session["category"] = dd_category.SelectedValue; Session["subcategory"] = dd_subcategory.SelectedValue; Response.Redirect("Results.aspx"); }
Теперь проблема заключается в том, что когда я снова выбираю какое-то другое значение в первом выпадающем списке и пытаюсь выбрать другое значение во втором выпадающем списке, второй выпадающий список имеет обратную передачу, поэтому он обновляет страницу и в соответствии с состоянием сеанса изменяет мое первое значение выпадающего списка обратно на prevoius one.
Скажите мне, что нужно сделать, чтобы новое выбранное значение не изменилось из-за обновления страницы.
ZurdoDev
Вам нужно разрешить ViewState работать. В разделе загрузка страницы проверьте наличие IsPostBack. ViewState автоматически сохранит эти значения для вас.
Raj Negi
я уже сделал это...на самом деле эти выпадающие списки находятся на моей главной странице, а результаты отображаются на странице results.aspx, которая использует главную страницу. Так что я привязываюсь к главной странице pageload, как вы говорите, но это не работает.
[no name]
Установите режим enableViewState значение true для этого в выпадающем списке
Raj Negi
это уже верно для всех трех выпадающих списков.