【问题标题】:How bindable controls (GridView, Repeater) maintain source data between postbacks可绑定控件(GridView、Repeater)如何在回发之间维护源数据
【发布时间】:2012-08-22 07:56:25
【问题描述】:

我在我的应用程序中广泛使用 GridViewRepeater(以及其他类似 DropDownList)控件以及 ObjectDataSourceObjectDataSource 提供数据的组件和类(ObjectDataSource 上的TypeName / SelectMethod 属性)。我最近注意到 SelectMethod 仅在

时调用
IsPostBack == false

另外,当我手动绑定时,我总是在 !IsPostBack 时绑定。直到现在,我从不好奇控件如何在回发之间维护它们的数据(我必须创建带有排序/分页等的 GridView,并且我想有效地做到这一点)。

您能否解释/提供一些链接并说明它是如何完成的?

我也没有得到一件事:当使用 GridView 并迭代行时,有时我需要访问它的 GridViewRow.DataItem 属性以获取支持对象(通常是获取某种 ID)。有时它是空的 - 有时不是。我不知道为什么。但是它为空,我仍然可以访问(例如)GridViewRow.DataKeys

谢谢

EDIT:知道什么时候回答说这要归功于 ViewState,我还有一个问题:如果我数据绑定 100 个非常重的业务对象并且我只使用数据绑定时属性很少(假设我还使用 OnRowDataBound 事件来渲染一些额外的数据),是否意味着整个对象都被序列化了?

【问题讨论】:

    标签: asp.net data-binding gridview repeater


    【解决方案1】:
    【解决方案2】:

    他们将其存储在页面上名为ViewState(或更准确地说是“__VIEWSTATE”)的隐藏字段中。如果您在 ASPX 页面上查看源代码,您会看到它。

    您也可以通过访问页面的 ViewState 属性在 ViewState 中存储和检索页面的状态信息。

    我会从这里开始http://msdn.microsoft.com/en-us/library/ms972976.aspx

    所以,是的,如果您存储大量大型对象,则在页面周期中会有大量数据在客户端之间来回传输。小心使用,Viewstate 可能有用,但使用不慎,可能会产生负面影响。

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      相关资源
      最近更新 更多