2012-06-13 3 views
0

J'ai un formulaire dans lequel je remplis du contenu en utilisant la procédure stockée et j'effectue des actions de mise à jour sur le contenu. Maintenant, mon bouton de mise à jour fonctionne bien. Mon problème est que chaque fois que je clique sur le bouton 'refresh' dans IE, le contenu est mis à jour et je ne veux pas que cela se produise. Je suis nouveau à. Net et à tout ce truc de ViewState. Toute aide est appréciée ..Le bouton de mise à jour continue de se mettre à jour lors d'un clic sur Actualiser dans IE

Voici mon code:

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

Répondre

2

oui, cela se produira. le problème est que vous actualisez l'événement post du clic sur le bouton. la solution consiste à rediriger vers la page après la fin de la mise à jour.

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

ou quelque chose comme ça.

Maintenant, si l'utilisateur clique sur Actualiser, il soumettra la requête GET pour charger la page, plutôt que le POST pour lancer l'événement de clic sur le bouton.

Si vous recherchez Post Get Redirect (ou quelque chose comme ça), vous trouverez beaucoup d'articles sur le sujet. décrivant à la fois la situation que vous avez rencontrée et pourquoi cette solution fonctionne.

Questions connexes