我试图让一些页面工作,但我有一个问题,我无法找到解决方案......
我有一段类似的代码:
Protected Sub chkClient_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles chkClient.CheckedChanged
If chkClient.Checked Then
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('Processing')", True)
LoadClients()
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('Done')", True)
End If
End Sub
嗯,事实是函数 LoadClients()需要一些时间处理,并且两个警报在函数完成后触发。这是为什么?如何在 LoadClients()功能之前启动"警告('处理')" ?
非常感谢!
答案 0 :(得分:2)
因为LoadClients正在服务器端进行处理,而您对RegisterStartUpScript的调用是在页面加载时连接代码以在客户端运行。
以下是有关RegisterStartUpsScript和一些示例的更多信息。
如果您希望在处理开始之前显示第一个警报,您可以使用ajax调用,您可以使用许多库即jQuery,或者只是在单击事件(或其他方式)上提交表单之前运行警报javascript您用来提交表格的事件
答案 1 :(得分:2)
加载页面时会发生什么情况,您只需获得Processing
提醒,然后点击Done
上的确定后再显示Processing
提醒。
您的所有代码都在服务器端完成,因此您告诉您的网页在呈现时向HTML添加提醒,然后告诉您的网页运行LoadClients()
,然后告诉您的网页添加另一个警告HTML。
整个ScriptManager.RegisterStartupScript(Page,....
行只是说“当这个页面渲染时我想让它也渲染这个javascript - 它实际上并没有在那里运行它。
为了在所有客户端执行此操作,您需要对Web方法执行AJAX调用,该方法将加载客户端并将其返回到您将处理和显示它的浏览器。
这是一个基础知识教程,这将让您了解如何使用一些javascript和AJAX调用来调用Web方法。从那里世界是你的牡蛎:):http://trentgardner.net/net/asp-net-webmethods-with-jquery-and-ajax/
答案 2 :(得分:1)
在您的复选框上,添加OnClientClick脚本:
<asp:CheckBox OnClientClick="alert('Processing...'); return true;" ... />
从服务器端事件处理程序中删除处理脚本注册 - 您不再需要它。那应该是你的伎俩。
事件顺序为: