上个月,我讨论了如何使用 ASP.NET Ajax 库所附带的新功能实现母版-详细信息视图。这组新功能包括用于客户端实时数据绑定的语法以及丰富呈现组件(例如 DataView 客户端控件)。通过结合使用这些功能,您可轻松构建嵌套视图以表示一对多数据关系。
在 ASP.NET Ajax 库中,母版-详细信息视图的机制主要按 DataView 组件处理和公开其事件的方式在该组件的逻辑代码中定义。
本月我将更进一步,讨论如何以 ASP.NET Ajax 库为基础,实现“预取”这一常见和热门的 AJAX 设计模式。基本上,我将扩展上个月的示例(一个向下钻取客户详细信息的相对标准的视图),以自动和异步方式下载并显示相关订单(如果存在)。在此期间,我将谈及一些 jQuery 相关事项,并了解一下 ASP.NET Ajax 库中的新 jQuery 集成 API。闲话少说,让我们看看上下文并构建第一个版本的示例。
要扩展的演示
图 1 显示了我将以之为基础来添加预取功能的应用程序方案。
图 1 示例应用程序的初始阶段
用户可通过菜单栏按名称首字母筛选客户。进行选择后,会通过 HTML 项目符号列表显示较小的客户列表。这是母版视图。
呈现的每一项都已成为可选择的项。单击某项会使该客户的详细信息显示在相邻的详细信息视图中。上个月我就讨论到此处。如您在图 1 中所见,用户界面现在显示一个用于查看订单的按钮。我现在从此处开始继续讨论。
要做的第一个决策是关于体系结构的,并与要考虑的用例有关。要如何加载订单信息?这些信息是否已随客户信息一起下载?订单是否附加到客户?此处是否可选择延迟加载?
我们所考虑的代码应在客户端运行,因此不能依赖构建到某些对象/关系建模 (O/RM) 工具(如实体框架或 NHibernate)中的延迟加载功能。如果订单要延迟加载,则所有代码都要由您自己完成。另一方面,如果可以假设订单已在客户端可用(即订单已与客户信息一起下载),则您已完成了大部分工作。接下来只需将订单数据绑定到某个 HTML 模板并执行即可。
显然,如果您需要延迟加载,则事情会变得更加有趣。那么,我们便来处理此方案。
另外,您应知道,如果通过 AdoNetDataContext 对象获得数据,则可完全支持延迟加载。(我会在将来的文章中对此进行讨论。)有关详细信息,请务必查看 asp.net/ajaxlibrary/Reference.Sys-Data-AdoNetServiceProxy-fetchDeferredProperty-Method.ashx。