有没有办法让 asp.net 页面 "catch up" 属于自己?

Is there a way to let an asp.net page "catch up" to itself?

我在 C# 中工作,我需要一个按钮,当用户单击它时立即将其禁用。但是,如果我把它作为 OnClick 函数的第一行

MyButton.Enabled = false;

它什么都不做。该按钮将保持启用状态,直到它遇到某种停止,无论是 Catch 块还是函数结束。

我在想,在 VB/VBA 中,您可以使用 DoEvents() 并允许代码自行处理。但是,在 C# 中似乎没有 DoEvents 方法。

这与链接的问题略有不同,因为我的 OnClick 代码如下所示:

OnClick="btnSubmit_Click"

并且该用户的 OnClick 代码如下所示:

onClick="this.disabled=true;
this.value='Sending…';
this.form.submit();"

当我尝试将代码更改为:

OnClick="this.disabled=true; btnSubmit_Click"

我收到一个错误。

Compiler Error Message: CS1041: Identifier expected; 'this' is a keyword

如何在 C#/asp.net 环境中执行此操作?

您将需要使用客户端 JavaScript。一种方法是使用 asp.net 按钮控件的 OnClientClick 属性。

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick(v=vs.110).aspx

这是服务器端的,将在 PageLoad/Postback -

上执行
MyButton.Enabled = false;

OnClickButton 的服务器端事件。所以你不能写:

OnClick="this.disabled=true; btnSubmit_Click"

OnClick 仅接受服务器端事件处理程序的方法名称。

如果要处理客户端按钮单击事件以防止用户多次单击它,请使用 OnCLientClick:

OnCLientClick = "this.disabled=true;"

您还必须将 UseSubmitBehaviour 设置为 false

阅读:Disable a button control during postback.