3

我对 Web Parts 和 Web Forms 比较陌生(我只使用过 MVC 框架)。

我打算在控制状态下存储一些数据。我能找到的所有示例都将object[]数组置于控制状态,并将base控制状态置于 0 索引上。

我真的不喜欢把所有东西都放在object[]一个MyWebPartControlState. 我会将基本控件状态存储在BaseControlState类型的属性中object

我想知道这是否会导致任何问题,或者是否有任何其他原因导致这可能不是一个好主意。我想知道,因为这对我来说是合乎逻辑的,但我找不到任何控制状态的例子,他们没有将所有内容直接置于控制状态或object[].

提前致谢。

4

1 回答 1

3

控制状态与视图状态保持在同一字段中,并遵循相同的序列化规则。您找到的所有示例都使用对象数组,因为这是 ASP.NET 中的优化状态序列化程序可以理解的类型之一,并且能够优化序列化。

如果您使用自定义对象,则序列化程序将不会使用优化,而是使用将导致控制状态臃肿的对象序列化。如果您想对您的状态有一个强类型的视图,您应该在您的自定义类上实现,以便它封装从序列化程序理解的简单对象到序列化程序理解的简单对象的转换。BinaryFormatter IStateManager

如果我没记错的话,序列化程序可以有效地序列化以下类型:

  • 原始类型(int,long等);
  • DateTime;
  • string;
  • 支持的值类型的装箱值;
  • 包含支持类型实例的对象数组;
  • Pair以及Triplet包含支持类型实例的对象。

我写了一篇简短的博文,说明了一个简单的自定义类被序列化BinaryFormatter与实现IStateManager和分解为序列化程序可以优化的简单类型所导致的大小差异。您可以在以下位置找到它:

ASP.NET ViewState 提示和技巧 #2

于 2012-08-21T10:08:15.567 回答