2013-08-27 47 views
2

我有代碼Page_Load和btnGonder_Click.I當我點擊btnGonder時將一些數據記錄到數據庫。並且我得到並顯示了data_data中page_load內部的代碼。問題是,當我每次刷新頁面時,它都運行btn_Gonder_Click事件,因此它將相同的數據記錄到database.my代碼如下。當我每次刷新頁面加載button_click事件時也運行

protected void Page_Load(object sender, EventArgs e) 
{ 
if (!IsPostBack) 
{ 
     Cevap cevaplar = new Cevap(); 
     int soru_id = Convert.ToInt32(Request.QueryString["Soru_Id"]); 
     cevaplar.soru_id = soru_id; 
     DataTable dtcvp = new DataTable(); 
     dtcvp = cevaplar.Cevaplarive_CevapVerenleri_Getir(); 
     datalistcevaplar.DataSource = dtcvp; 
     datalistcevaplar.DataBind(); 
} 
} 

protected void btnGonder_Click(object sender, EventArgs e) 
{ 
     Users kullanicim = new Users(); 
     HttpCookie bilgiler = Request.Cookies["Kullanicicookie"]; 
     kullanicim.mail = bilgiler["mail"]; 
     int donenkullaniciid = kullanicim.Kullanici_Id_Donder(); 
     cevaplar.cvpveren_id = donenkullaniciid; 
     Sorular sorular = new Sorular(); 
     sorular.Cevap_Sayisi_Artir(soru_id); 
     bool durum = cevaplar.Cevap_Ekle(); 
     if (durum) 
     { 
      lblDurum.Text = "Cevabınız Eklenmiştir"; 
     } 
     else 
     { 
      lblDurum.Text = "Cevabınız Eklenmemiştir"; 
     } 
     DataTable dtcvp = new DataTable(); 
     dtcvp = cevaplar.Cevaplarive_CevapVerenleri_Getir(); 
     datalistcevaplar.DataSource = dtcvp; 
     datalistcevaplar.DataBind(); 
} 

回答

2

刷新頁面重新大火已經造成前面的回傳,因此,如果您刷新頁面點擊按鈕後,再點擊按鈕事件將觸發相同的事件。現在要避免你有多個解決方案。看here

1

使用this.IsPostBack內btnGonder_Click()來檢查提交的狀態,並返回

+0

我不明白你能不能寫代碼請 –

0

如果你不想重新提交上刷新頁面,然後從btnGonder_Click你需要重定向到同一頁面,而不是直接綁定數據。因爲這是Asp.net應用程序的基本問題。

做Response.Redirect並傳遞頁面的名字。

0

如果您已經點擊了一個導致回帖的按鈕。接着按F5鍵,瀏覽器會問你RESEND,表示再次點擊按鈕。這是正常的瀏覽器行爲

0

基本上你需要一個解決方法來檢查它是頁面刷新還是實際的按鈕點擊。你可以做如下: 這裏的關鍵是ViewState["IsPageRefresh"] & Session["IsPageRefresh"]。請注意,需要在頁面上啓用ViewState以使其工作;如果ViewState未啓用,則可以使用隱藏字段。

protected void Page_Load(object sender, EventArgs e) 
{ 
if (!Page.IsPostBack) 
{ 
Session["IsPageRefresh"] = Server.UrlDecode(System.DateTime.Now.ToString()); 
} 
} 

protected void Page_PreRender(object sender, EventArgs e) 
{ 
ViewState["IsPageRefresh"] = Session["IsPageRefresh"]; 
} 
protected void btnPost_Click(object sender, EventArgs e) 
{ 
if (Session["IsPageRefresh"].ToString() == ViewState["IsPageRefresh"].ToString()) 
{ 
//Put your database INSERT code here 
Session["IsPageRefresh"] = Server.UrlDecode(System.DateTime.Now.ToString()); 
} 
} 

一個簡單的伎倆,但可能不是一個標準的做法我也同意低於: 不要在服務器端禁用按鈕。頁面加載完成後,按鈕將照常運行。

<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function checkButton() { 
      var btn = document.getElementById("btnGonder"); 
      btn.disabled = true; 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:Button ID="btnGonder" runat="server" onclick="btnGonder_Click" 
     OnClientClick="checkButton();" /> 
    </div> 
    </form> 
</body> 
相關問題