0

ストアド プロシージャを使用してコンテンツを入力するフォームがあり、コンテンツに対して更新アクションを実行します。これで、更新ボタンが正常に機能します。私の問題は、IE で「更新」ボタンをクリックするたびにコンテンツが更新され、それが発生したくないことです。私は.NetとこのすべてのViewStateのものに不慣れです。どんな助けでも大歓迎です..

これが私のコードです:

            public partial class _Default : System.Web.UI.Page
            {

         protected void Page_Load(object sender, EventArgs e)
         {


         }
        public void BindGridView()
   {
    string constring =     ConfigurationManager
           .ConnectionStrings["shaConnectionString"].ConnectionString;

    using (SqlConnection con = new SqlConnection(constring))
    {
        using (SqlCommand cmd = new SqlCommand("spd_pc", con))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = con;
            cmd.Parameters.Add("@city", SqlDbType.VarChar).Value = txt_city.Text;

            con.Open();
            IDataReader idr = cmd.ExecuteReader();
            GridView1.DataSource = idr;
            GridView1.DataBind();
            idr.Close();
            con.Close();

        }
    }
}
protected void Button1_click(object sender, EventArgs e)
{
    BindGridView();
}
private void DeleteRecords(int id)
{
    string constring = ConfigurationManager.
      ConnectionStrings["shaConnectionString"].ConnectionString;

    using (SqlConnection conn = new SqlConnection(constring))
    {

        using (SqlCommand cmd = new SqlCommand("del_pc", conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = conn;
            conn.Open();
            cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = id;

            cmd.ExecuteNonQuery();

            conn.Close();
        }
    }

}




protected void ButtonDelete_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView1.Rows)



        CheckBox chkb = (CheckBox)row.FindControl("CheckBox1");

        if (chkb.Checked)
        {
            int id = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Values[0]);


            if (!(id.Equals(System.DBNull.Value)))
            {
                DeleteRecords(id);
            }
        }
    }
    BindGridView();
}
protected void Button2_Click(object sender, EventArgs e)
{
    if (!IsCallback)
    {

        string active = "active";
        string inactive = "inactive";
        foreach (GridViewRow row in GridView1.Rows)
        {
            CheckBox chkb = (CheckBox)row.FindControl("CheckBox1");

            if (chkb.Checked)
            {
                int id = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Values[0]);
                string status = row.Cells[5].Text;

                if (!(id.Equals(System.DBNull.Value)))
                {
                    if ((String.Equals(active, status)))
                        UpdateRecords(id);
                    if ((String.Equals(inactive, status)))
                        UpdateRecords(id);
                }
            }
        }
    }
}
private void UpdateRecords(int id)
{
    string constring = ConfigurationManager.
           ConnectionStrings["shaConnectionString"].ConnectionString;

    using (SqlConnection conn = new SqlConnection(constring))
    {

        using (SqlCommand cmd = new SqlCommand("upd_pc", conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = conn;
            conn.Open();
            cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = id;

            cmd.ExecuteNonQuery();

            conn.Close();
        }
    }
    BindGridView();
          }
      }     
4

1 に答える 1

2

はい、こうなります。問題は、ボタンクリックのポストイベントを更新していることです。解決策は、更新が完了した後にページにリダイレクトすることです。

button_click(...)
{
   //save to db
   Response.Redirect(Request.Referrer);
}

またはそのようなもの。

ユーザーが更新をクリックすると、ボタン クリック イベントを発行する POST ではなく、GET 要求を送信してページをロードします。

Post Get Redirect (またはそのようなもの) を検索すると、このトピックに関する記事がたくさん見つかります。発生した状況と、この解決策が機能する理由の両方を説明してください。

于 2012-06-13T18:59:56.713 に答える