C# 单击后禁用按钮,同时维护CausesValidation和OnClick方法
我有一个按钮:C# 单击后禁用按钮,同时维护CausesValidation和OnClick方法,c#,asp.net,validation,button,postback,C#,Asp.net,Validation,Button,Postback,我有一个按钮: <asp:Button runat="server" ID="btnSubmit" meta:resourcekey="btnSubmit" CausesValidation="true" OnClick="btnSubmit_Click" /> onclick我正在禁用按钮并重新添加onclick方法所需的PostBackReference 问题:原因验证不见了,sadface。我到底应该如何在CodeBehind中重新添加它?或者,对于这个问题,什么是完全不同的
<asp:Button runat="server" ID="btnSubmit" meta:resourcekey="btnSubmit" CausesValidation="true" OnClick="btnSubmit_Click" />
onclick我正在禁用按钮并重新添加onclick方法所需的PostBackReference
问题:原因验证不见了,sadface。我到底应该如何在CodeBehind中重新添加它?或者,对于这个问题,什么是完全不同的解决方案
我的按钮必须:
a) 单击后禁用自身,但回发后仍将启用
b) 有一个OnClick代码隐藏方法
c) 原因验证
谢谢
丹尼斯编辑
如果在知道是否隐藏/禁用按钮之前需要进行服务器端验证,那么您可能希望放弃禁用按钮,只要确保在用户敲击按钮时,服务器端代码不会执行过多
如果(!IsPostBack),您可以在页面中放置一个隐藏字段并为其生成GUID,然后在您的btnSubmit上单击执行以下操作
if(Session[Page.ToString() + "_spam"] != null && Session[Page.ToString() + "_spam"] == hdnGuid.Value) {
return
} else {
Session[Page.ToString() + "_spam"] = hdnGuid.Value;
//do stuff
}
在页面加载中尝试以下操作 VB C#
只需用
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;");
}
这将如何解决我的问题?是的,显然这和禁用一样有效,但我仍然需要激活onclick。@Dennis Röttger-只有当所有内容都有效时,才想隐藏按钮,所以使用Page_ClientValidate()检查是否所有内容都正确。不管怎样,现在可以了-下一个问题:Page无效,按钮点击被触发,按钮验证页面,验证程序抛出他们的错误文本,一切都很好-除了按钮保持禁用,因为没有引发回发。想法?很好地工作,也是目前为止最精简的想法,我不需要禁用按钮和验证/Onclick工作,谢谢!
if(Session[Page.ToString() + "_spam"] != null && Session[Page.ToString() + "_spam"] == hdnGuid.Value) {
return
} else {
Session[Page.ToString() + "_spam"] = hdnGuid.Value;
//do stuff
}
Dim postBackOptions As PostBackOptions = New PostBackOptions(btnSubmit)
btnSubmit.OnClientClick = "this.disabled=true;"
btnSubmit.OnClientClick += ClientScript.GetPostBackEventReference(postBackOptionClaim)
PostBackOptions postBackOptions = new PostBackOptions(btnSubmit);
btnSubmit.OnClientClick = "this.disabled=true;";
btnSubmit.OnClientClick += ClientScript.GetPostBackEventReference(postBackOptionClaim);
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;");
}