在单击后禁用按钮,同时保持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)原因验证

谢谢,丹尼斯

在单击后禁用按钮,同时保持CausesValidation和OnClick-Method

覆盖你的页面或母版页的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 
}
相关文章:
  • 没有找到相关文章