我正在使用定时信息框来保持用户更新,因为他们的记录被插入到数据库中,并且我正在使用以下 Sub 创建一个定时信息框。它完全按照我的意愿工作,但我现在才意识到 MessageBoxes 不适用于 Internet 应用程序。我无法决定 InfoBox 是否可以通过互联网工作,似乎 可能会,但我真的不确定。为了更新标签,我尝试执行 Async 时经历了一段可怕的时光。这似乎是迄今为止最简单的解决方案,如果它会在所有内容上传到服务器后实际显示。
Sub MessageBoxTimer(curRec As String, TotalRec As String)
Dim AckTime As Double, InfoBox As Object
InfoBox = CreateObject("WScript.Shell")
'Set the message box to close after 10 seconds
AckTime = 1
Select Case InfoBox.Popup("Updating Record " + curRec + " of " + TotalRec,
AckTime, "Scheduling all users", 1)
Case 1, -1
Exit Sub
End Select
End Sub
你必须采用一些客户端代码来做到这一点。
我建议采用jquery.ui dialog。所以,假设你已经安装了 jQuery(你需要它),那么还要安装 jQuery.ui。
所以,当我们在表单上放置一个按钮时,该按钮可以有 2 个事件。一个将运行服务器端代码(回发),然后还可以有一个也运行的客户端(javascript)事件。
当然,如果服务器端代码运行得非常快,那么该对话框将不会“出现”或显示很长时间。
所以,你可以说在服务器端代码中添加一个“dealy”。事实上,这样做不需要定时对话框,因为当代码隐藏完成后,整个浏览器页面从服务器传回,重新加载并刷新页面。
所以,让我们设置一个假延迟,并在服务器端代码运行时弹出一个消息框。
换句话说,我们“可以”设置一个定时框,但是当服务器端代码完成后,该框无论如何都会关闭。
所以,说这个简单的标记:
<asp:Button ID="cmdStart" runat="server"
Text="Start the process" CssClass="btn"
OnClick="cmdStart_Click"
OnClientClick="mywaitdialog()"
/>
<div id="mywaitdialog" style="display: none" class="myshadow">
<h3>Updating data - please wait</h3>
<div style="text-align: center">
<img src="../Content/wait2.gif" style="height: 64px; width: 70px" />
</div>
</div>
所以,你可以把任何你想要的东西放到那个 div 里。当你看起来很漂亮时,然后按照上面的方法设置 display:none 。
现在,JQuery.UI 对话框将为您做的是将 htat "div" 转换为对话框。
所以,在标记的正下方,我们有这个:
<script>
function mywaitdialog() {
var myDialog = $("#mywaitdialog");
myDialog.dialog({
title: "Processing",
modal: true,
width: "350px",
});
}
</script>
这个测试按钮示例背后的代码:
Protected Sub cmdStart_Click(sender As Object, e As EventArgs)
' fake a long process
System.Threading.Thread.Sleep(5000) ' 5 second delay
End Sub
现在的结果是这样的: