Gridview ControlState甚至在viewstate禁用且不使用DataKeyNames时也非常大

时间:2009-12-20 12:25:40

标签: asp.net gridview viewstate

我有一个asp:Gridview绑定到asp:ObjectDataSource。我已经在GridView上禁用了ViewState,并且没有设置DataKeyNames属性。我有大约10个BoundFields和一些TemplateFields。这些TemplateFields不是绑定到服务器控件,而是绑定到锚标记或img标记。

但是,在运行时,当我打开页面跟踪时,我看到Gridview的ControlState在7到12K之间变化,仅显示14行数据。 (在呈现的页面上查看源也在__VIEWSTATE隐藏字段中提供相同的长字符串)。我不明白为什么会发生这种情况,因为我在gridview上有enableViewState =“false”,如上所述,我没有使用DataKeyNames。那么,这个Gridview ControlState来自哪里,有没有办法摆脱它?

提前致谢, 添

3 个答案:

答案 0 :(得分:4)

我认为这是正常的,因为: 控制状态不能被禁用,控制状态被设计用于存储控件的基本数据(例如寻呼机控件的页码),这些数据必须在回发时可用,以使控件即使在禁用视图状态时也能正常工作

注意:默认情况下,ASP.NET页面框架将页面中的控件状态存储在存储视图状态的同一隐藏元素中。即使视图状态被禁用微软说

这意味着您实际上在_ViewState字段中看到了ControlState的数据,这是正常的   因为微软称控件的ControlState存储在viewstate中,即使你禁用了ViewState

答案 1 :(得分:0)

如果您正在禁用viewstate,不使用gridview中的任何回发控件,而不进行分页/排序,那么最好使用转发器。中继器不必放在标签内。因此,控制状态不会成为问题。

如果您正在使用.net 3.5,您还可以使用ListView进行调查,对我来说这似乎是转发器/ gridview混合。

答案 2 :(得分:0)

article表示控件状态实际存储在__VIEWSTATE的{​​{1}}中。

此外,这些文章说,即使你可以设置HybridDictionary,你也永远不能关闭EnableViewState=false(这是重点 - 所以客户不能破坏你的应用程序):