客户端和服务器端事件不同时触发

3

我有一个asp.net按钮控件。我的需求是,在单击按钮时,它应该同时被禁用并触发服务器端事件。我通过以下方式禁用按钮:

onclientclick = "this.disabled = true;"

并通过调用服务器端方法来实现

onclick = "someserversidemethod"

但问题是该按钮被禁用并且未触发服务器端事件。我希望同时触发客户端和服务器端事件。请帮忙。

不如在服务器端方法中移除OnClientClick并将按钮设置为禁用状态,您觉得怎么样? - Alxandr
@Alxandr:起初我也是这么做的。但是这个按钮在更新面板内部,并且在单击后会对 Web 服务进行异步调用。只有在 Web 服务返回后,该按钮才会被禁用。我希望在服务返回之前它就被禁用,以防止用户同时点击该按钮。这就是为什么我不得不采用客户端事件来禁用该按钮。请给予建议。 - Anutosh Datta
尝试在“this.disabled = true;”之后加上“return true;”吗? - Bert
1个回答

4
保留原有设置,同时添加属性UseSubmitBehavior="false"。这将强制按钮使用ASP.NET的回发机制,而不是内置浏览器机制。 更多详情请参见此处 编辑
浏览器默认情况下,单击控件(在使用时呈现为HTML)会提交表单。ASP.NET利用此功能来启动到服务器的回发。
问题在于,如果按钮被禁用(如在JavaScript中所做的那样),则浏览器将不会提交表单(即不会发生回发)。
通过使用属性UseSubmitBehavior="false",您告诉ASP.NET忽略浏览器可以自行提交的事实,而应该使用由ASP.NET提供的JavaScript回发方法(与AutoPostback="true"用于像等元素的方法相同)。
JavaScript回发会忽略您刚刚设置的控件已被禁用的事实,这意味着控件在屏幕上被禁用,但回发仍将发生。
希望这样能让您理解。

你的意思是我应该使用客户端事件,并将UseSubmitBehavior="false"来禁用按钮吗? - Anutosh Datta
正确,保持客户端禁用,但也将上述属性放在按钮上。我会在我的答案中添加更多内容来解释它。 - freefaller
谢谢,它起作用了。您能解释一下UseSubmitBehavior="false"的含义吗? - Anutosh Datta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接