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);
}

或类似的东西。

现在,如果用户单击刷新,它将提交 GET 请求以加载页面,而不是 POST 以发出按钮单击事件。

如果您搜索 Post Get Redirect(或类似的东西),您会发现很多关于该主题的文章。描述您遇到的情况以及此解决方案为何有效。

于 2012-06-13T18:59:56.713 回答