2012-06-13 107 views
0

我有一個表單,其中使用存儲過程填充內容,並對內容執行更新操作。現在我的更新按鈕正常工作。我的問題是,每次點擊IE中的'刷新'按鈕時,內容都會更新,我不希望這種情況發生。我對.Net和所有ViewState的東西都很陌生。任何幫助表示讚賞..更新按鈕在IE中刷新點擊時保持更新

這裏是我的代碼:

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

回答

2

是的,會出現這種情況。問題在於你正在刷新按鈕點擊的發佈事件。解決方案是在更新完成後重定向回頁面。

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

或類似的東西。

現在如果用戶點擊刷新,它會提交GET請求來加載頁面,而不是POST來發出按鈕點擊事件。

如果您搜索Post Get Redirect(或類似的東西),您會發現很多關於該主題的文章。描述您遇到的情況以及此解決方案的工作原理。