0

我正在尝试将下拉列表选择的值保存在 glbal 变量中。我在下拉列表中有很多国家/地区,当我选择其中一个并按下按钮时:

protected void Button1_Click(object sender, EventArgs e)
    {
        Button2.Enabled = true;
        Button2.Visible = true;
        DropDownList1.Visible = true;

        DropDownList9.Items.Clear();


        if (!Class1.Search_Continent.Equals("-"))
        {
            SqlConnection conn1 = new SqlConnection(@"Data Source=AK-PC\MSSQLSERVER1;Initial Catalog=DB;Integrated Security=True");
            conn1.Open();
            SqlCommand cmd1 = new SqlCommand("Select Country_name FROM Country WHERE Continent_name='" + DropDownList1.SelectedValue + "'", conn1);
            SqlDataReader dr1;
            dr1 = cmd1.ExecuteReader();

            while (dr1.Read())
            { DropDownList9.Items.Add(dr1["Country_name"].ToString() + "\n"); }

            dr1.Close();
            conn1.Close();

}

protected void Button2_Click(object sender, EventArgs e)
    {
        // Redirect to Country page
        Class1.CountryName = DropDownList9.SelectedValue.ToString();
        Response.Redirect("Country.aspx", true);
    }

它不采用选定的值!它总是取下拉列表的第一个值!请帮我 !

4

2 回答 2

1

您可能正在重新绑定DropDownList9on 回发并丢失SelectedValue.

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostback)
    {
       //bind data
    }
}
于 2013-01-04T13:39:10.890 回答
0

它总是取下拉列表的第一个值

如果您错误地填充数据,这在 Web 表单中很常见。你在哪里填充下拉列表?我你在做Page_Load。我还要猜测你没有将它包裹在类似if (!IsPostBack). 如果您在其中放置一个调试断点,Page_Load您会发现它在调用之前 Button2_Click的回发中被调用。

请记住,HTTP 是无状态的。这意味着需要在对服务器的每个请求上构建整个服务器端页面对象。 Page_Load是该构造的一部分,它发生在事件处理程序之前。所以可能发生的事情是:

  1. 用户请求初始页面。
  2. 您使用数据填充下拉列表。
  3. 您向用户显示页面。
  4. 用户选择一个选项并单击一个按钮,发出回发请求。
  5. 您破坏并重新填充下拉列表,将其返回到默认状态。
  6. 您尝试获取选定的值,该值现在已消失。

此问题最常见的解决方案是使用上述条件 in Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    // some initial logic
    if (!IsPostBack)
    {
        // stuff that should only happen when the page first loads
        // for example, populating controls from the database
    }
    // any other logic, etc.
}

控件的值不需要在每次回发时重新填充,因为诸如视图状态之类的东西应该保持必要的数据可用。(尽管如果你完全搞砸了,那么你可能需要再修补一些。)

于 2013-01-04T13:43:13.563 回答