0

就个人而言,我喜欢在服务器上进行所有控件绑定(例如,填充/绑定下拉列表、填充文本框等)。当页面加载时,我将调用绑定页面上所有控件的 BindControls()。当用户更改 UpdatePanel 中的下拉选项时,我将在回发时访问服务器并再次调用 BindControls()。

问题是UpdatePanel 显然来回传递页面的整个视图状态,而不仅仅是UpdatePanel 中控件的视图状态。我不明白为什么会这样,但就速度而言,这是一个相当大的性能损失。

过去,我使用过 Telerik 的 RadAjaxManager,它允许您指定希望将哪些控件的视图状态传递给服务器。它非常完美,因为它不需要客户端代码,并且仍然允许您在服务器上整合所有绑定逻辑,同时保持较小的视图状态传输。

不要误会我的意思:我喜欢 AJAX、Json 和 javascript,但我不喜欢用它执行绑定操作。也就是说,我想找到一种方法来配置 UpdatePanel,以便它只传输特定控件的视图状态或找到一个替代控件,它仍然允许我在服务器上绑定我的控件,然后将更新的 HTML 传递到客户。

4

2 回答 2

0

不幸的是,在处理 ASP.net 时,很难干净地控制 ViewState 与服务器之间的 ping-ponding 方式。页面生命周期的大部分内容都是围绕 ViewState 构建的,它对于整个平台来说非常重要。

正如 walther 所说,最好的选择是结合使用 jQuery 和 Web 服务来处理您网站上的 AJAX 功能。我可能会避免将功能实现为 Page 方法,因为我相信调用它们需要您每次都将页面置于整个生命周期中。我还建议研究使用 Knockout.jsjQuery 模板来帮助将数据绑定到您的客户端元素。如果组合得当,这些技术可以帮助您创建更丰富的客户端功能,与使用传统的 ASP.net AJAX 控件相比具有更高的性能和更低的维护开销。

采用这些更开放的标准的另一个好处是它们更容易转换到其他网络平台。使用 jQuery 来处理您的 AJAX 意味着如果您需要为运行 PHP 或 MVC 的站点进行开发(如果您想下车),那么您用于创建客户端功能的许多技术或多或少都是相同的重量级 WebForms 平台)

于 2012-08-02T16:37:43.900 回答
0

如果您需要控制,我建议改用 jquery + 页面方法或 Web 服务。过去我一直在使用 UpdatePanels 和各种类似的控件,但出于这样的原因我放弃了它。与学习更新面板等的技巧相比,使用 jquery 来实现所需的行为和性能要容易得多。无论您对技术有多了解,每一层抽象都会增加开销。

于 2012-08-02T16:27:16.517 回答