在单击后禁用按钮,同时保持CausesValidation和OnClick-Method
本文关键字:CausesValidation OnClick-Method 单击 按钮 | 更新日期: 2023-09-27 18:17:53
我有了这个按钮:
<asp:Button runat="server" ID="btnSubmit" meta:resourcekey="btnSubmit" CausesValidation="true" OnClick="btnSubmit_Click" />
meta:resourcekey用于本地化资源,这里我们不关心-因为我们可以看到它有一个OnClick-Method并导致验证。
这工作得很好,太,但我想禁用按钮后,用户点击它,所以他/她不能多次点击它之前,PostBack成功,所以这是我在Page_Load
:
btnSubmit.Attributes.Add("onclick", "this.disabled=true;" +
Page.ClientScript.GetPostBackEventReference(btnSubmit, "").ToString());
我正在禁用按钮并重新添加onclick - method所需的PostBackReference。
Problem: CausesValidation is gone, sadface。我该如何在CodeBehind中重新添加它,或者——有什么完全不同的解决方案吗?
My Button has to:
a)单击后禁用自身,但在回发后启用b)有一个OnClick CodeBehind方法c)原因验证
谢谢,丹尼斯
用
覆盖你的页面或母版页的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);
EDIT
if(Page_ClientValidate()) {this.visibility='hidden';}
如果你需要在知道是否隐藏/禁用按钮之前进行服务器端验证,你可能会想放弃禁用按钮,只需要确保在用户点击按钮时服务器端代码不会执行过多的操作。
你可以在page_load if(!IsPostBack)中设置一个隐藏字段,并为其生成一个GUID,然后在btnSubmit_click中执行如下操作
if(Session[Page.ToString() + "_spam"] != null && Session[Page.ToString() + "_spam"] == hdnGuid.Value) {
return
} else {
Session[Page.ToString() + "_spam"] = hdnGuid.Value;
//do stuff
}