我正在尝试使用 TreeViews 和 UpdatePanels 编写我认为是相当常规的 AJAX 模式的代码。我的情况是这样的:
我在 UpdatePanel 中有一个 TreeView。我在另一个 UpdatePanel 中有一个文字。当用户单击 TreeView 中的一个节点时,Literal 的内容会更新。现在,由于整个事情是异步的,所以在点击和文字内容更新之间当然存在时间延迟。这段时间,我想做两件事:
1) 显示更新进度,以及
2)清除Literal的内容
这样用户就不必在异步加载新文本时盯着旧内容。
我似乎想不出一个简单的方法来完成 (2)。我一直在阅读客户端回调并使用 GetCallbackEventReference,但对于看似简单的问题,这似乎是一种非常复杂的方法。
理想情况下,我想让 TreeView 独自完成它的工作。我不想自己获取内容并使用JS将它们添加到TreeView。我只想在客户端检测节点更改事件,清除 Literal,让 TreeView 继续正常运行。
这可能吗?还是客户回电是我唯一的选择?
最佳答案
您会想要使用 ASP.NET AJAX 库中的 PageRequestManager
。这是 PRM 的 MSDN 引用 - http://msdn.microsoft.com/en-us/library/bb311028.aspx .
请注意,Microsoft 已声明 TreeView 在 UpdatePanel 中可能存在问题,您还需要非常注意性能,特别是如果您有一个大型 TreeView(请参阅我的有关优化 UpdatePanel 性能的文章 - http://www.aaron-powell.com/blog.aspx?id=1195)。您真的应该看看类似 jQuery 插件的东西(例如:http://bassistance.de/jquery-plugins/jquery-plugin-treeview/)。
但要真正回答您的问题,您需要:
- 有一个
BeginRequest
事件处理程序,它会清除你的文字,甚至可以显示正在加载(我不喜欢 UpdateProgress,我更喜欢我自己做的更精细的控制) - 使用
EndRequest
事件确保加载组件消失
您还可以使 TreeView 成为页面上第二个 UpdatePanel 的 AsyncPostbackTrigger
,或者在 TreeView 的异步回发期间调用它的 Update 方法
关于回发前的 ASP.NET TreeView javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/388312/