asp.net如何disabled button并执行服务器端方法?

Joy 分类:好好学习 | Joy 标签: Joy 发表于2011/04/19,1:39 | 4条评论

我们有一个提交按钮,当用户点击之后,弹出对话框询问是否继续,选择是,则执行该按钮的onClick事件,否则什么都不做。

一开始我的代码是这样的:

  1. //Button
  2. <asp:Button ID="btnSubmit" Text="Submit" runat="server"
  3. OnClick="btnSubmit_Click" OnClientClick="return confirmClick(this);" />
  1. //javascript
  2. <script type="text/javascript">
  3.         debugger;
  4.         function confirmClick(btn) {
  5.             var obj = confirm("Do you want to process?");
  6.             if (obj) {
  7.                 btn.disabled = true;
  8.                 return true;
  9.             }
  10.             else {
  11.                 return false;
  12.             }
  13.         }
  14.     </script>

结果Button是disabled了,但是服务器端的btnSubmit_Click方法没有执行。经过google和百度,最后在百度知道找到答案: btn.disabled = true;这里的问题。这里设为true了,就不会传这个button给服务器了。所以这里不能设为true。

那么如果一定要disabled这个button怎么办呢?(这个在实际中是很重要的,避免在响应过程中用户多次点击这个按钮)

弃用OnClientClick,代码改写为:

  1. //前台Button代码
  2. <asp:Button ID="btnSubmit" Text="Submit" runat="server"  
  3. OnClick="btnSubmit_Click" />
  1. //后台代码
  2. protected void Page_Load(object sender, EventArgs e)
  3. {  
  4.   btnSubmit.Attributes.Add("onclick",
  5.    "this.disabled=true; if(confirm('Do you want to process?')){"
  6.   +Page.ClientScript.GetPostBackEventReference(btnSubmit, "").ToString()
  7.   + "} else{this.disabled = false;return false;}");
  8. }