我有代码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();
}
答案 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>