ASP.NET 4.0由于网络延迟允许用户多次点击表单提交按钮,导致重复的条目,我尝试使用Javascript在第一次单击后禁用按钮,直到回发。我不知道Javascript所以我为我的无知而道歉。 问题按钮是在具有多种表单的页面上的tabcontrol内的updatepanel内的一种形式,等等。所以我使用的验证组包含根据下拉选择关闭或打开的不同验证器。
这是我的按钮:
<asp:Button ID="BtnAddProd" runat="server" OnClick="BtnAddProd_Click"
Text="Add Status" ValidationGroup="Activity_ValControls"
onclientclick="disableBtnOnClick(this,'Activity_ValControls')"
CausesValidation="False" />
这是我的Javascript:
function disableBtnOnClick(btnName, valGroup) {
var isGroupValid = Page_ClientValidate(valGroup);
//check if validation group is successful
if (isGroupValid) {
//set button to disabled so you can't click on it.
btnName.disabled = true;
btnName.value = 'Please wait...'
}
else {
alert('Page is not valid');//for testing
}
}
我走了许多不同的道路,这是我得到的最接近的道路。它适用于一种情况 - 只有在第一次单击导致验证错误时,我才会更正错误并提交。如果没有错误,或者由于我的下拉选择没有相关的验证器(即,当他们想要添加自由文本注释记录时)或者如果我第一次正确输入所有已验证的字段,那么它很快就会闪烁到禁用“请稍候......”文字然后返回启用和默认文字。如果我然后很快点击它很多次,它最终会禁用“请稍候......”文本并保留在那里。
有什么想法吗?
答案 0 :(得分:0)
如果我误解了这个问题,请原谅我。我会直接使用javascript在提交按钮上执行此操作。我有一个类似的问题,我必须在发布到服务器之前用JS操纵网站。这段代码使用了JQuery。
http://jsfiddle.net/sckyq7ta/4/
$("[type='submit']").click(function (event, args) {
if (!args) {
event.preventDefault();
//Do your thing
$(this).attr("disabled", "true");
$(this).html("Please wait..");
//call myself with args to enable default (posting to server)
$(this).trigger("click", {
enableDefault: true
});
}
});
答案 1 :(得分:0)
感谢您的回复。上面评论中的链接让我添加了UseSubmitBehavior =&#34; False&#34;到我的按钮,这就是我需要的。