如果想在CS文件中通过Response.Write("<SCRIPT LANGUAGE='javascript'>{confirm("+js+");}</SCRIPT>"));得到JavaScript确认对话框,并在下一步对选择结果进行判断的话,这不是一个好判断方式。比如要在按钮点击之后,弹出“确定删除记录?”的确认对话框的话,在按钮事件中使用Response.Write后再获取返回值是不能实现的,Response.Write的执行事件应该是在页面回发后,Response.Write("<SCRIPT LANGUAGE='javascript'>{confirm("+js+");}</SCRIPT>"));之后的语句会先执行,最后才Response.Write,这种执行时序与想象的逻辑顺序是相反的。另外,倘若你使用了AjaxUpdatePanel的话,还会出现

“无法分析从服务器在通过调用 Response.Write() 修改响应时,将启用响应筛选器、HttpModule 或服务器跟踪。”

的异常,如果你只想在UpdatePanel中使用一个通知消息的话,则应使用Triggers,如下:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="bt_Over"    runat="server" Text="结束" onclick="bt_Over_Click" />
</ContentTemplate> 
<Triggers>
<asp:PostBackTrigger ControlID="bt_Over" />
</Triggers>    
  
</asp:UpdatePanel>

网上搜索了很多,通过隐藏控件,注册客户端事件引起服务端事件回发等方法都比较繁琐,显得小题大做。最终我寻找到了一个很好的替代方法:

Button按钮的客户端事件onclientclick中,使用

function(s, e) {
 if(!confirm("确定删除?"))
  return false;  
}

当客户端脚本返回false(选择否)后,事件终止,不再激发客户端事件Button_Click(包含你的删除语句),不进行任何操作;

当客户端脚本返回true(选择是)后,客户端事件执行完后继续激发客户端事件Button_Click(),执行删除操作。

是不是很简单!

好了,使用Devexpresse的朋友需要注意了,再对ASPxButton的客户端事件ClientSideEvents中使用confirm需要另外一种写法:

function(s, e){

  e.processOnServer =confirm('确定更新?');

}

e.processOnServer指的是服务器端如何处理。好了,确认就到此为止,希望对各位有所帮助!

posted on 2011-04-13 13:23  KevinHuke  阅读(3222)  评论(0编辑  收藏  举报