为什么这个Javascript会破坏所需的验证?

为什么这个Javascript会破坏所需的验证?,javascript,asp.net,Javascript,Asp.net,我有一个ASP.NET web表单应用程序,其中一个页面用于提交订单。发生的情况是,一些用户在单击提交时不会等待页面被处理,这有时需要几秒钟,然后再次按下提交按钮。这导致创建重复订单 为了防止上述问题,我在页面的页面加载中添加了以下代码: Submit.Attributes.Add("onclick", " this.disabled = true; " + ClientScript.GetPostBackEventReference(Submit, null) + ";"); 现在发生的

我有一个ASP.NET web表单应用程序,其中一个页面用于提交订单。发生的情况是,一些用户在单击提交时不会等待页面被处理,这有时需要几秒钟,然后再次按下提交按钮。这导致创建重复订单

为了防止上述问题,我在页面的页面加载中添加了以下代码:

Submit.Attributes.Add("onclick", " this.disabled = true; " +   ClientScript.GetPostBackEventReference(Submit, null) + ";");
现在发生的是页面上的所有验证都被破坏。也就是说,当用户单击Submit时,一些必填字段保留为空,asp:requiredfieldvalidator的文本会短暂出现,但页面会被提交


如何更改上述代码以使所需的验证仍然有效?

验证和回发代码由asp.net自动添加,如果您设置自己的onclick,则无需自行添加

因此,我认为通过以这种方式设置属性,可以在验证调用之前添加第二个回发调用。您只需在代码隐藏中添加代码即可禁用按钮:

Submit.Attributes.Add("onclick", " this.disabled = true; ");
或者页面本身

<asp:Button OnClientClick="this.disabled = true;" />

在HTMLdiv元素中再添加一个按钮,并隐藏该div的可见性。当用户单击您的按钮时。只需在div.内触发该按钮的提交事件,并使您的按钮禁用。这个问题的另一个解决方案是将它放在Ajax更新面板中,并在0毫秒延迟后显示一个进度指示器微调器。此解决方案不需要任何Javascript。

是否可以移动代码以禁用validate函数中的按钮?那么,如果按钮被禁用,@plb对不起,我不明白你的建议。所需字段验证通过asp:requiredfieldvalidator完成。那么你指的是哪个验证函数?对不起。我没有asp验证的经验。我只是建议更改验证程序代码,以便在验证通过时禁用该按钮。。。也许asp是不可能的…伦博里,非常感谢!这似乎首先解决了问题。但后来我对它进行了测试,结果是当用户单击Submit时页面没有提交,字段保留为空,但Submit按钮被禁用。因此无法再次提交。如果验证失败怎么办?那么按钮不应该被禁用。验证失败时,按钮不应被禁用;你说得对。但是使用我上面发布的代码它会被禁用。我需要考虑的是如何更改Submit.Attribute。。。代码,使其仅在Page.IsValid返回True时激发。但我不知道怎么做。