【发布时间】:2009-04-13 18:42:56
【问题描述】:
我在数据网格中的页面左侧有一个用户列表,我想在页面右侧加载一个 div,其中包含单击的用户信息。我假设我会在 itemcommand 事件中加载 div,但是我该如何处理页面加载呢?我需要知道导致回发的原因吗?我还需要在page_load 上重新加载网格吗?
【问题讨论】:
标签: grid load itemcommand
我在数据网格中的页面左侧有一个用户列表,我想在页面右侧加载一个 div,其中包含单击的用户信息。我假设我会在 itemcommand 事件中加载 div,但是我该如何处理页面加载呢?我需要知道导致回发的原因吗?我还需要在page_load 上重新加载网格吗?
【问题讨论】:
标签: grid load itemcommand
那我该如何处理页面加载呢?
每个回发都使用一个全新的页面类实例,并完全重建页面。唯一不同的是,某些控件可能是通过 ViewState 预先填充的。您无需为任何这些控件重复加载工作。
我需要知道导致回发的原因吗?
ASP.Net 将为您处理并触发事件。您只需要知道它是否是回发,甚至可能都不需要(请参阅下一部分)。
我是否也需要在 page_load 上重新加载网格?
是的。嗯,有点。您需要将网格的 html 重新呈现给浏览器。好消息是您的网格数据可能已经处于视图状态,并且会自动发生。您不必自己担心。
但是,在许多情况下,您可能会发现最好关闭网格的视图状态并在每次回发时重新加载它们。这是因为 ViewState 只是页面上的隐藏输入,必须随每个请求发布(上传)到服务器。大多数互联网用户的上传带宽非常有限,因此一个大的 ViewState 会让你的网站看起来很慢,即使你的服务器几乎没有出汗。
根据您的情况,您可以通过在选择控件上禁用 ViewState 来换取一些超额服务器性能来换取站点响应能力,从而获得更好的效果。在这种情况下,您将始终加载网格,不再需要关心请求是否为回发。
相比之下,如果这是一个 intranet 应用程序,其中用户通常通过本地以太网连接到您的 Web 服务器,则很难在平衡响应能力和服务器性能方面击败 ViewState。
【讨论】:
通过检查 !IsPostBack 排除网格绑定
if(!IsPostBack){
// Bind the Grid
}
对于 div itemcommand,您可以检索从网格中单击的值并加载用户信息。
因此,您不需要每次都加载网格。它只会第一次加载。我认为您不需要检查导致回发的原因,因为无论如何您只会加载一次网格。
【讨论】: