当我每次刷新页面加载button_click事件时也会运行

时间:2013-08-27 11:39:48

标签: c# asp.net

我有代码Page_Load和btnGonder_Click.I当我点击btnGonder时我将一些数据记录到数据库。我得到并在datalist中显示page_load里面的代码数据。问题是当我每次刷新页面时,它运行btn_Gonder_Click事件,因此它将相同的数据记录到database.my代码如下。

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

5 个答案:

答案 0 :(得分:2)

页面刷新会重新触发导致上一次回发的同一事件,因此如果在单击按钮后刷新页面,则会触发按钮单击事件。现在要避免你有多种解决方案。见here

答案 1 :(得分:1)

在btnGonder_Click()中使用this.IsPostBack来检查提交和返回的状态

答案 2 :(得分:0)

如果您不想在刷新时重新提交页面,那么从btnGonder_Click您需要重定向到同一页面而不是直接绑定数据。因为这是Asp.net应用程序的基本问题。

执行Response.Redirect并传递页面名称。

答案 3 :(得分:0)

如果您已经点击了导致回复的按钮。接下来按F5,浏览器会询问您RESEND,这意味着再次单击该按钮。这是正常的浏览器行为

答案 4 :(得分: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>