Tag: ajax.net

异步调用.NET方法并在完成时绑定到网格

Container.RetrieveItems()调用一段时间的服务,所以我想异步调用它(在检索项之后,它们被设置为Container类的List属性)。 完成检索项目后,我希望它更新一个在updatePanel内的gridView(updatePanel Mode =“Conditional”和ScriptManager EnablePartialRendering =“true”.UpdatePanel没有触发项)。 我设置了断点并逐步完成了每一步。 检索项目,网格是数据绑定然后它调用更新。 没有exception被抛出但网格没有随内容更新。 如果我使用触发器和Timer.OnTick事件将UpdatePanel设置为更新它工作正常,但是我只需要在检索项目后更新它,因此在完成服务调用后触发手动UpdatePanel.Update()将是理想的。 我做了很多搜索,但所有答案都是’你忘了调用DataBind()’ 有什么我想念的吗? private void UpdateGrid() { grid.DataSource = Container.List; grid.DataBind(); updatePanel.Update(); } protected void Page_Load(object sender, EventArgs e) { var task = Task.Factory.StartNew(Container.RetrieveItems); task.ContinueWith((x) => UpdateGrid()); } 更新:我设置了一个更简单的测试来尝试识别问题。 我创建了一个标签,其Text属性将在方法完成时更新。 当页面加载时,它调用方法并在方法完成时调用updatePanel.Update()但没有更改。 根据Jaimes的建议,我尝试在Button_click的回发中调用手动更新,它确实更新了标签。 这就是为什么我当前的设置无法正常工作,尽管我仍然在寻找在完成异步任务时更新内容的最佳方法。

异步设计中的会话

我们正在构建一个支持AJAX的Web应用程序,它向服务器发出多个异步请求。 这些服务器请求中的每一个都是长时间运行的服务器任务,每个服务器任务都将JSON对象返回到html页面。 这些调用中的每一个都需要对Session对象的读/写访问权限。 但是当多个异步任务正在进行时,ASP.NET会锁定会话对象,从而阻止第一个异步调用。 所以这些异步调用永远不会并行发生。 PS:异步调用是PageMethod调用。 当使用并行异步调用时,首先不建议使用会话。 有关设计此异步请求模型的任何其他建议将受到高度赞赏。