2012-09-12 230 views
0

我有一个表单和一个提交按钮的网页,并在服务器端我用一个会话值来防止表单提交两次,这就像会话的初始值为0并在用户点击提交按钮后将其变为1,每次提交按钮都会先检查会话值。asp.net表单提交两次

但是,当我们的项目发布时,我发现同一个人有两个记录(这意味着他们提交了两次我猜,而且它并不经常发生在一两个人身上),并且时间间隔这两个记录之间的距离非常小,比如0.3秒,所以首先我以为他们可能会双击提交按钮,但是当我在我的电脑上试过后,它仍然只插入一条记录到数据库中

我很困惑这发生了,以及如何预防它?

下面是代码:

 protected void Page_Init(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      Session["IsBackForwordPayment"] = 0; 
     } 
    } 

    protected void submit_Click(object sender, EventArgs e) 
    { 

     if (Session["IsBackForwordPayment"] != null && Session["IsBackForwordPayment"].ToString() != "0") 
      Response.Redirect("~/pages/renewal/duplicaterenewal.aspx"); 

....... 
} 

是否有可能因为检查会话值后的程序只是重定向到另一个页面,但不能终止提交过程?

+0

你的页面中有ImageButton吗? http://stackoverflow.com/questions/1498269/asp-net-double-click-problem –

+0

Response.Redirect(“字符串”)自动调用Response.End(),所以执行应该停止。你确定这不是多次点击?在form.submit页面上的任何Javascript?另外...它是否在UpdatePanel(AJAX)中?或者只是标准的Webforms? – theyetiman

+0

@theyetiman我试过多次点击,一切都还好,但它实际上是标准的webform – pita

回答

0

尝试

Response.Redirect("~/pages/renewal/duplicaterenewal.aspx", true); 

这将停止当前页面上执行。

+0

,我不知道如何确定这是解决方案,我试图返回错误,但它始终在我的电脑上正常工作,我不知道用户做了什么来做到这一点 – pita

+0

好吧,目前的Response.Redirect代码将运行,但任何后续的代码也将运行,直到下一页加载。 Response.Redirect之后是否有任何代码可以产生您在用户案例中看到的条件。 – chead23

0

显然,Response.End()不会停止代码的执行(这就是它所说的)。我在这里发现了这一点:

Response.Redirect not ending execution

您将需要添加一个return声明你做Response.Redirect()后终止执行。