1

我试图让一些页面工作,但我有一个问题,我无法找出解决方案......

我有一段类似的代码:

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()函数之前触发我的“alert('Processing')” ?

非常感谢!

4

3 回答 3

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/

于 2013-07-08T20:39:07.910 回答
2

因为 LoadClients 正在服务器端进行处理,而您对 RegisterStartUpScript 的调用正在连接代码以在页面加载时在客户端运行。

这是有关 RegisterStartUpsScript 的更多信息和一些示例。

关联

如果您希望在处理开始之前显示您的第一个警报,您可以使用 ajax 调用,您可以将许多库用于 jQuery,或者只是在单击事件(或其他事件)上提交表单之前运行您的警报 javascript您用于提交表单

于 2013-07-08T20:36:41.803 回答
1

在您的复选框上,添加一个 OnClientClick 脚本:

<asp:CheckBox OnClientClick="alert('Processing...'); return true;" ... />

从您的服务器端事件处理程序中删除处理脚本注册——您不再需要它了。那应该对你有用。

事件的顺序将是:

  1. 用户点击复选框
  2. OnClientClick 被触发并显示您的警报。
  3. 回发到服务器,您的服务器端点击事件将在其中处理。
  4. 页面重新渲染,您注入的“完成”警报出现。
于 2013-07-08T20:43:54.743 回答