如何为支持AJAX的GridView来回执行最少的数据

时间:2012-08-28 14:01:49

标签: asp.net ajax listview updatepanel asp.net-4.0

我的ASP.Net 4.0 / C#应用程序中有250行和4列的列表视图。渲染页面大小(来自Trace)为650,000字节。整个列表视图位于更新面板中。

listview有助于对列表视图记录进行查看/添加/编辑/删除操作。

每个POSTBACK操作(即编辑单击,删除单击)都会导致大小为112,000字节的POSTBACK请求和大约650,000字节的AJAX响应。

listview从页面上的声明性数据源(SQLDataSource)获取数据。每次往返都会限制列表视图。

我希望减少每次调用中来回传输的数据,因为在连接速度很慢的情况下,这些AJAX调用需要2-3分钟才能完成。

我尝试了什么 - 在整个列表视图中删除了更新面板,并在每个列表视图上添加了更新面板:

  • ItemTemplate内容
  • AlternateItem模板内容
  • 编辑模板内容
  • 插入模板内容

我希望通过每行中的模板,它会减小AJAX响应的大小,因为只有更新面板的HTML会回来。不幸的是,它似乎没有那样工作。

关于如何解决我案件中的问题的任何意见?

提前感谢您查看此内容。

3 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是不使用ASP.NET用户控件,而是使用JavaScript,JSON,HTML和服务器端Web服务/ http处理程序干净地执行此操作

这样您就不必从服务器向客户端发送大量HTML响应。您还可以控制何时需要刷新和重新绑定数据。

答案 1 :(得分:1)

UpdatePanel的问题在于您没有使用真正的AJAX。相反,ASP.NET使用一些非常聪明的黑客来创建部分页面更新的错觉。在后台,执行整个页面生命周期。这也意味着您的完整ViewState来回发送。

如果您想获得更快的体验,则不应使用UpdatePanels。相反,使用纯HTML控件(最好不是服务器控件)并使用JavaScript和服务器端Web服务(例如WebAPI或WCF服务)来响应客户端请求。

这些请求和响应只包含一些JSON数据且没有标记。您的数据可以保持在最低限度。例如,如果用户删除了一行,则只需将该行的Id发送给您的服务,它将返回成功或失败。客户端将使用JavaScript和类似KnockoutJS的内容来呈现结果。这将为您提供最小的开销和更好的性能。

答案 2 :(得分:0)

我敢打赌,整个尺寸问题必须ViewState。原因是,在每次回发中,即使是AJAX回发,ViewState也会在每次请求时随之旅行。在不进行任何更改的情况下,您唯一能做的就是在IIS端启用压缩。这至少会发送压缩响应,浏览器将负责解压缩。

最好的方法是不要使用UpdatePanelScriptManagers,而是通过调用WCF Web服务使用jQuery(或您喜欢的任何框架)来发出AJAX请求。这不会触发整个页面生命周期,也不会在每个请求上发送ViewState