青松阳光

关注.NET平台及SharePoint产品
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

updated on 2008/6/26

最近做一个从Access项目向 Asp.net + SqlServer迁移工作,其中遇到了这种情况,在Access窗体的一个按钮事件中,代码大体上是这么个功能:弹出模态对话框,在关闭对话框之后继续走一段数据库操作代码。
在Asp.net里弹出模态对话框容易,但是在模态对话框关闭之后还要继续执行服务器代码,这就要求当对话框关闭之后页面要立即提交。于是有了以下的解决方法。

在Web Form中拖入服务器端按钮,并假设此按钮ID为 btnComput,在隐藏页面的 Page_Load 中用代码中这样写:
btnComput.Attributes("onclick") = " window.showModalDialog('')",参数为对话框Web Form。
在btnComput的服务器端事件里执行当对话框关闭之后的数据库操作代码。

因为点击 btnComput时,先执行客户端javascript,在弹出模态对话框后,页面也没提交,一直等到对话框关闭之后,javascript才算执行完毕,然后Web页面提交,继续执行服务器端的事件。这样连同客户端代码和服务器端事件代码一起实现了Access中那个按钮的功能。

在弹出的模态页面里要注意两点:
1. 在进行事件处理时防止弹出新的页面
2. 防止发生缓存不向服务器提交
可以添加以下标记在<head>里
<!--Prevent opening new window-->
<base target="_self" />
<!--Disable the cache-->
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
    <meta http-equiv="expires" content="Mon, 23 Jan 1978 20:52:30 GMT" />


看到一位网友对Asp.net中使用模态窗体的心得,写得不错,见下:
1. Asp.net中使用javascrip的模态窗体的一点体会
2. Accessing a parent browser window from a child window or vice versa using JavaScript