单击后禁用按钮

时间:2011-11-05 17:40:02

标签: asp.net vb.net

Private Function StoreCouponCode() As String
        Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString)
        Dim sql As New SqlCommand("", con)
        Dim sqlGetSlNo As New SqlCommand("SELECT MAX(SlNo) FROM Coupons WHERE CustID=" & Convert.ToInt16(HFCustID.Value) & " AND BusiID=" & Convert.ToInt16(HFBusiID.Value) & " AND OfferID=" & Convert.ToInt16(HFOfferID.Value), con)
        Dim sNo, UserID, couponCode, offerCheck As String
        Dim slNo As Int16

        Try
            UserID = getCurrentUserID()
            con.Open()
            sNo = Convert.ToString(sqlGetSlNo.ExecuteScalar)     'fteches latest serial no for the coupon
            If sNo = "" Then
                slNo = 0
            Else
                slNo = Convert.ToInt16(sNo) + 1
            End If
            couponCode = MakeCouponCode(slNo)
            offerCheck = couponCode.Substring(13, 3)
            sql.CommandText = "INSERT INTO Coupons VALUES (" & _
                                  HFCustID.Value & "," & HFBusiID.Value & "," & HFOfferID.Value & ",'" & _
                                  Today.Date & "'," & Convert.ToString(slNo) & "," & offerCheck & ",'" & couponCode & "','" & _
                                  UserID & "'," & LblPayInAdv.Text & "," & LblPayLater.Text & ",'" & Convert.ToString(Date.Now) & "')"
            sql.ExecuteNonQuery()
            con.Close()
        Catch ex As Exception
            couponCode = "N/A"
        Finally
            con.Dispose()
            sql.Dispose()
        End Try
        Return couponCode
    End Function





Protected Sub CmdGetCoupon_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles CmdGetCoupon.Click
        If User.Identity.Name = "" Then
            LblMessage.Text = "You need to login first!"
            Exit Sub
        End If
        Dim couponCode As String = StoreCouponCode()
        Response.Redirect("~/Coupon.aspx?CouponCode=" & couponCode, True)
    End Sub

当用户点击CmdGetCoupon时,需要一段时间才能重定向..因此,用户多次点击CmdGetCoupon,这会导致从单个用户帐户生成多个优惠券。< / p>

我想显示一条消息“请等待您的优惠券正在生成”并禁用CmdGetCoupon以便用户无法多次点击....任何想法??如何做到这一点?? < / p>

3 个答案:

答案 0 :(得分:5)

在javascript中执行此操作 - 使用OnClientClick调用禁用传入表单元素的函数。

// On button
... OnClientClick="DisableMe(this);" ...

// Javascript
function DisableMe(elem)
{
   elem.disabled = true;
   // more code to show message
}

答案 1 :(得分:2)

在你的html方面,你必须将它添加到onClientClick属性中:

<asp:Button ID="CmdGetCoupon" runat="server" onClientClick="this.disabled=true;" />

修改
由于@Oded如此准确地指出我的第一个答案没有解决消息的显示,这里有几个选项。

<span id="PleaseWaitContainer"></span>
<asp:Button ID="CmdGetCoupon" runat="server" onClientClick="this.disabled=true;document.getElementById('PleaseWaitContainer').innerText='Please Wait While Your Coupon Is Being Generated';" />

或者

<asp:Button ID="CmdGetCoupon" runat="server" onClientClick="this.disabled=true;alert('Please wait while your coupon is being generated...';" />

答案 2 :(得分:1)

您可以在点击处理程序中禁用该按钮,因为您将重定向到另一个页面,因此不关心任何其他逻辑。 否则,如果您正在执行任何异步操作,请再次单击它后立即禁用它,并在异步回调处理程序中根据逻辑启用它或以其他方式正确处理它。