减少'asyncPostBackControlIDs'列表

时间:2013-01-07 09:23:03

标签: asp.net asp.net-ajax updatepanel fiddler

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

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

有没有办法在服务器上存储'asyncPostBackControlIDs',就像使用ViewState一样,或者减少'asyncPostBackControlIDs'列表的大小?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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