2

我有代码 Page_Load 和 btnGonder_Click。当我单击 btnGonder 时,我将一些数据记录到数据库中。我在数据列表中获取并显示数据,即 page_load 内的代码。问题是当我每次刷新页面时,它都会运行 btn_Gonder_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();
}
4

5 回答 5

1

页面刷新会重新触发导致先前回发的相同事件,因此如果您在单击按钮后刷新页面,则会触发按钮单击事件。现在为避免您有多种解决方案。看这里

于 2013-08-27T11:42:47.203 回答
0

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

于 2013-08-27T11:42:55.357 回答
0

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

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

于 2013-08-27T11:46:14.507 回答
0

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

于 2013-08-27T12:54:15.360 回答
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>
于 2013-08-27T13:02:05.960 回答