【问题标题】:Client side and server side events not firing simultaneously客户端和服务器端事件未同时触发
【发布时间】:2012-07-21 23:57:24
【问题描述】:

我有一个 asp.net 按钮控件。我的要求是,在单击按钮时,它应该被禁用并同时触发服务器端事件。我正在禁用按钮

onclientclick = "this.disabled = true;"

并通过

调用服务器端方法
onclick = "someserversidemethod"

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

【问题讨论】:

  • 如何删除 OnClientClick 并在服务器端方法中将按钮设置为禁用?
  • @Alxandr:最初我是这样做的。但是该按钮位于更新面板内,单击后会异步调用 Web 服务。只有在 Web 服务返回后,该按钮才会被禁用。我希望在服务返回之前将其禁用,以便用户同时无法单击该按钮。这就是为什么我不得不去客户端事件来禁用按钮。请指教。
  • 试过把'return true;'在'this.disabled = true;'之后?

标签: javascript


【解决方案1】:

保留您所拥有的并设置属性UseSubmitBehavior="false"。这将强制按钮使用 asp.net 回发机制,而不是内置的浏览器机制。

See here for more details

编辑

当您单击<input type="submit"> 控件(当您使用<asp:Button> 时呈现给HTML 的内容)时,作为标准的浏览器将始终提交一个表单。 ASP.NET 使用此功能启动回发到服务器。

您遇到的问题是,如果按钮被禁用(就像您在 javascript 中所做的那样),那么浏览器将提交表单(即不会发生回发)。

通过使用属性UseSubmitBehavior="false",您告诉 ASP.NET 忽略浏览器可以自己提交的事实,而按钮应该使用 ASP.NET 提供的 JavaScript 回发方法(与使用的方法相同)在AutoPostback="true" 上查看<asp:Checkbox> 等)。

javascript 回发忽略了您刚刚将控件设置为禁用的事实,这意味着该控件将在屏幕上被禁用,但回发仍然会发生。

我希望这是有道理的

【讨论】:

  • 你的意思是说我应该去客户端事件以禁用带有 UseSubmitBehavior="false" 的按钮?
  • 正确,保持客户端禁用,但也将上述属性放在按钮上。我会在我的答案中添加更多内容来解释它。
  • 谢谢。有效。你能解释一下 UseSubmitBehavior="false" 吗?
  • 非常感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多