【发布时间】:2012-11-23 16:25:38
【问题描述】:
我正在创建一个扩展 WebControl 的自定义控件。这个 Web 控件允许消费者在标记中定义列的集合,如下所示:
<Custom:CustomGrid>
<Columns>
<Custom:DataColumn HeaderText="FirstName" />
<Custom:DataColumn HeaderText="LastName" />
</Columns>
并将 IEnumerable 放入 DataSource 属性中,然后将其呈现到表中。 该控件还允许分页。 DataSource 中的 IEnumerable 是完整列表,我一次显示列表的一页。我已经将当前页面、每页的行数等保存到视图状态。我是否也应该将完整列表放入视图状态?也许会话? 这个列表可能会变得有点庞大。也许使用随机密钥保存在会话中,该密钥保存在视图状态中? 这里的最佳做法是什么?
编辑:我认为强制 IEnumerable 中的所有类型都可序列化是不正确的。这公平吗?那么我需要将数据源复制到其他数据结构中进行序列化吗?
编辑 2: 即使我确实使用基本控件而不是实现 RenderChildControls,我也需要实现 CreateChildControls,但我仍然需要将数据保存在某个地方,或者我错过了基类?
【问题讨论】: