Raj Negi Ответов: 5

Как сохранить значение 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

это уже верно для всех трех выпадающих списков.

5 Ответов

Рейтинг:
2
Рейтинг:
1

DamithSL

тебе не нужен сеанс. состояние просмотра сохранит выбранные значения. Я думаю, что вы потеряли выбранные значения при обратной передаче из-за привязки снова и снова на каждом обратном посте. проверьте IsPostBack, а затем свяжите свои первый и второй droupdowns. 3-й может быть привязан к выбранному изменению индекса 2-го дропдауна.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)             
    {
      //Bind 1st dropdown
      //bind 2nd dropdown
    }
}

// in your 2nd droupdown selected index changed event  
void Ddl2_Index_Changed(Object sender, EventArgs e) 
{
   //bind 3rd droupdown based on 2nd droupdown selected item value

}


Raj Negi

я уже сделал это...на самом деле эти выпадающие списки находятся на моей главной странице, а результаты отображаются на странице results.aspx, которая использует главную страницу. Так что я привязываюсь к главной странице pageload, как вы говорите, но это не работает.

Рейтинг:
0

Dnyaneshwar@Pune

Установить свойства autopostback и включить режим государственного имущества, правда для этого случае dropdownlist для


Raj Negi

да, это правда. я обновляю вопрос, может быть, это поможет вам понять проблему.

Рейтинг:
0

Kan07

поместите это в onselected index changed

..

if (dd_category.SelectedValue != "0")
        {
            Session["catid"] = dd_category.SelectedValue;
            
            ViewState["category"] = dd_category.SelectedValue;
        }



проверьте свойство IsPostBack, а затем свяжите свой 1-й ddl и 2-й ddl. 3-й может быть привязан к выбранному изменению индекса 2-го droupdown.


Рейтинг:
0

Gautam Raithatha

Вам просто нужно проверить, установлено ли значение EnableViewState в true для всех выпадающих списков.

Также удалите приведенный ниже код из события Page_Load:

if (Session["state"] != null)
{
     dd_state.SelectedValue = (string) Session["state"];
}


Теперь все 3 выбранных значения выпадающего списка останутся выбранными после обратной передачи страницы (если вы не перенаправите на ту же страницу снова при нажатии кнопки).


Richard Deeming

ЧЕТЫРЕ ГОДА слишком поздно.

Придерживайтесь ответов на недавние вопросы.