如果想在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="结束" οnclick="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指的是服务器端如何处理。好了,确认就到此为止,希望对各位有所帮助!