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