0

我有一个包含大量控件的页面,这些控件可以触发对服务器的回发。我知道在一个页面上拥有大量控件并不是一种好的做法,但是我的 ASP.NET Web 应用程序的性质需要它。看到我在这个页面上有大量的控件,我大量使用了UpdatePanels。我将 ViewState 存储在 Session 中,以减少页面的响应大小,效果很好。

但是,使用 Fiddler,我注意到 ajax 响应的 '__VIEWSTATE' 部分之后的 'asyncPostBackControlIDs' 包含每个可以触发回发的 UpdatePanel 的每个控件的列表。这份清单是巨大的!似乎该列表在每页上没有太大变化,因此每次在 UpdatePanel 中发生回发时下载整个列表是没有意义的......

有什么方法可以像使用 ViewState 一样将“asyncPostBackControlIDs”存储在服务器上,或者以其他方式减小“asyncPostBackControlIDs”列表的大小?

4

1 回答 1

1

AFAIK,没有记录在asyncPostBackControlIDs其他地方存储的方法-此外,我非常怀疑是否存在这种可能性,因为客户端很可能需要这些控制ID来决定是进行常规回发还是异步回发。

您可以将UpdatePanel 的ChildrenAsTriggers属性设置为 false 并手动注册实际触发回发的控件 - 例如,您可能拥有具有 java-script 处理程序的 LinkBut​​ton/HyperLink。

此外,也许您可​​以减少可能导致回发的控件列表。例如,您可以使用 anchors(a) 代替链接按钮/超链接,然后设置隐藏变量,然后模拟(隐藏)按钮单击。在服务器端,隐藏变量的值将指示负责回发的实际控制。这样,您可以拥有一个按钮,作为许多其他控件的回发控件。

最后,你真的是一个想要拥有非常高效的请求/响应流然后放弃 ASP.NET 控制模型而转而使用 ASP.NET MVC 的人。或者在较小的范围内,停止使用 AJAX 的更新面板(它们会完成页面的 POST 并且几乎整个页面周期都在服务器端执行)并改用脚本服务(以及 jquery 插件)。

最后,您需要查看实际响应大小的控件 id 大小 - 例如,100K 响应中的 5K 长 id 可能不是很大的开销。减少这些 id 可能会为您节省 5%(如果可能的话),但同样的努力值得吗?

于 2013-01-07T09:50:35.243 回答