0

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

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

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

列表视图从页面上的声明性数据源 (SQLDataSource) 获取数据。并且列表视图在每次往返时都绑定。

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

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

  • 项目模板内容
  • AlternateItem 模板内容
  • 编辑模板内容
  • 插入模板内容

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

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

提前感谢您查找此内容。

4

3 回答 3

1

做到这一点的最好方法是不使用 ASP.NET 用户控件,而是使用 JavaScript、JSON、HTML 和服务器端 Web 服务/http 处理程序干净利落地执行此操作

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

于 2012-08-28T14:06:05.877 回答
1

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

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

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

于 2012-08-28T14:09:33.680 回答
0

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

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

于 2012-08-28T14:14:26.857 回答