0

ドロップダウンリストで選択した値をglbal変数に保存しようとしています..ドロップダウンリストに国がたくさんあります。そのうちの1つを選択して、ボタンを押してください。

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

DropDownList9おそらく、オン ポストバックを再バインドし、 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. 選択した値を取得しようとしましたが、現在は表示されていません。

この問題の最も一般的な解決策は、前述の条件を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 に答える