单击后禁用按钮,同时保持CausesValidation和OnClick方法

所以我有这个按钮:

 

meta:resourcekey用于本地化资源,这里不关心我们 – 因为我们可以看到它有一个OnClick-Method并导致validation。

这也很好,但我想在用户点击它之后禁用该按钮,这样他/她在PostBack成功之前就不能多次点击它,所以这就是我在Page_Load所做的:

 btnSubmit.Attributes.Add("onclick", "this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(btnSubmit, "").ToString()); 

onclick我正在禁用该按钮并重新添加OnClick-Method所需的PostBackReference。

问题:CausesValidation消失了,悲伤。 我究竟如何在CodeBehind中重新添加它或者 – 这是一个完全不同的解决方案?

我的按钮必须:

a)单击后禁用自身,但在回发后启用b)具有OnClick CodeBehind方法c)导致validation

谢谢,

丹尼斯

只需覆盖ur页面或母版页的Onload事件

 protected override void OnLoad(EventArgs e) { base.OnLoad(e); // prevents form from being submitted multiple times in MOST cases // programatic client-side calls to __doPostBack() can bypass this Page.ClientScript.RegisterOnSubmitStatement(GetType(), "ServerForm", "if (this.submitted) return false; this.submitted = true; return true;"); } 

在Page_Load中尝试以下操作

VB

 Dim postBackOptions As PostBackOptions = New PostBackOptions(btnSubmit) btnSubmit.OnClientClick = "this.disabled=true;" btnSubmit.OnClientClick += ClientScript.GetPostBackEventReference(postBackOptionClaim) 

C#

 PostBackOptions postBackOptions = new PostBackOptions(btnSubmit); btnSubmit.OnClientClick = "this.disabled=true;"; btnSubmit.OnClientClick += ClientScript.GetPostBackEventReference(postBackOptionClaim); 

编辑

 if(Page_ClientValidate()) {this.visibility='hidden';} 

如果您在知道是否隐藏/禁用按钮之前需要进行服务器端validation,那么您可能希望放弃禁用按钮,并确保服务器端代码执行不超过必要的用户敲击按钮。

您可以在page_load中放置一个隐藏字段并为其生成GUID if(!IsPostBack)然后在您的btnSubmit_click上执行类似的操作

 if(Session[Page.ToString() + "_spam"] != null && Session[Page.ToString() + "_spam"] == hdnGuid.Value) { return } else { Session[Page.ToString() + "_spam"] = hdnGuid.Value; //do stuff }