在客户端触发服务器端事件之前,禁用按钮

分享于 

3分钟阅读

Web开发

  繁體 雙語

介绍

很多时候,在触发服务器端事件之前,需要在客户端禁用一个按钮。 一个例子是在处理信用卡付款时,按钮必须被禁用,直到处理了卡片的详细信息。 这有时似乎是无响应的,因这里如果用户再次单击按钮,风险可能会被两次处理。

为了避免这个问题,在用户单击按钮后在客户端禁用按钮是最好的方法。 可以通过简单的JavaScript函数和属性来禁用按钮。 但是问题是服务器端事件一旦使用JavaScript禁用了按钮就不会被触发。

我在 ASP.NET 2.0中找到了一个很好的功能来克服这个问题: ClientScript.GetPostBackEventReference 。的主要功能 ClientScript.GetPostBackEventReference 它返回一个字符串,该字符串可以在客户端事件中使用,以使 postback 成为服务器。 http://msdn2.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.getpostbackeventreference.aspx

使用代码

//Code Behind//Add this within the Page_Load()btnClick.Attributes.Add("onclick", 
 ClientScript.GetPostBackEventReference(btnClick, "") + 
 ";this.value='Processing Credit Card Payment...';this.disabled = true;"); //The actual code with which I testedprotectedvoid Page_Load(object sender, EventArgs e)
{
 btnClick.Attributes.Add("onclick", 
 ClientScript.GetPostBackEventReference(btnClick, "") + 
 ";this.value='Processing Credit Card Payment...';this.disabled = true;");
}protectedvoid btnClick_Click(object sender, EventArgs e)
{
 System.Threading.Thread.Sleep(2000);
}
ASPX页
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title>Untitled Page</title></head><body><formid="form1"runat="server"><div><asp:ButtonID="btnClick"runat="server"Text="ClickMe"OnClick="btnClick_Click"/></div></form></body></html><h2>This would do the job perfectly!</h2>

Server  EVE  event  SID  按钮  服务器端  
相关文章