2013-07-08 68 views
1

我试着去得到一些页面的工作,但我有一个问题,我不能找出解决的办法......Asp.net vb.net执行顺序块

我有一段类似的代码这样的:

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()函数?

非常感谢!

回答

2

,当你点击Processing一个OK后,装载页面,你会简单地得到一个Processing警报,然后你Done警惕什么会发生在这里。

所有的代码都在服务器端完成,因此当您的页面呈现时告诉页面向HTML添加警报,然后告诉页面运行LoadClients(),然后告诉页面向该页面添加另一个警报HTML。

整个ScriptManager.RegisterStartupScript(Page,....行只是简单的说“时,该页面呈现,我希望它也使这个JavaScript - 它实际上并没有在它上面运行,然后

为了做到这一点,你需要的所有客户端执行AJAX调用Web方法,该方法将加载您的客户端并将其返回到您的浏览器,您将在其中处理并显示它。一个JavaScript和AJAX调用的Web方法。从那里,世界是你的牡蛎:):http://trentgardner.net/net/asp-net-webmethods-with-jquery-and-ajax/

+0

非常感谢您的回答达伦! – Knave

+0

非常欢迎:) – Darren

2

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

这是关于RegisterStartUpsScript和一些例子的更多信息。

Link

如果你想你的第一个警报显示处理开始,你可以使用Ajax调用,您可以使用许多库,即jQuery的或者干脆就是在提交表单之前运行的JavaScript警报之前您正在使用提交表单的单击事件(或其他事件)

+0

你只回答了一半的问题。你还没有解释他/她怎样才能做到他们想要的... – Chris

+0

非常感谢你的回答Gratzy! – Knave

1

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

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

从你的服务器端事件处理程序删除处理脚本注册 - 你不需要它了。这应该为你做的伎俩。

事件的顺序将为:

  1. 用户点击复选框
  2. 的OnClientClick被触发,你的警报显示。
  3. 回传到服务器,您的服务器端点击事件将被处理。
  4. 页面重新渲染并显示您的注入“完成”警报。
+0

非常感谢您的回答Tombala! – Knave

+0

没问题。并感谢你的礼貌! – Tombala