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