当你无法使用ViewState时你会做什么?

2024-02-04

我有一个相当复杂的页面,它在转发器内动态构建用户控件。该转发器必须在 Init page 事件期间绑定ViewState已初始化,否则动态创建的用户控件将不会保留其状态。

这创建了一个有趣的 Catch-22,因为我将转发器绑定到的对象需要在初始页面加载时创建,然后保留在内存中,直到用户选择离开或保存。

因为我无法使用ViewState为了存储这个对象,但让它在 Init 期间可用,我被迫将它存储在 Session 中。

这也有问题,因为我必须在非回发期间显式地清空会话值,以便模拟如何ViewState works.

在这种情况下必须有更好的状态管理方法。有任何想法吗?

Edit:关于使用的一些好的建议LoadViewState,但当我这样做时,我仍然遇到状态未恢复的问题。

这是页面结构的一些内容

页面 --> 用户控件 --> 转发器 --> 动态创建 N 个用户控件。

我把覆盖的LoadViewState在父级中UserControl,因为它被设计为完全封装并独立于它所在的页面。我想知道这是否是问题所在。


页面上的LoadViewState方法肯定是答案。总体思路如下:

protected override void LoadViewState( object savedState ) {
  var savedStateArray = (object[])savedState;

  // Get repeaterData from view state before the normal view state restoration occurs.
  repeaterData = savedStateArray[ 0 ];

  // Bind your repeater control to repeaterData here.

  // Instruct ASP.NET to perform the normal restoration of view state.
  // This will restore state to your dynamically created controls.
  base.LoadViewState( savedStateArray[ 1 ] );
}

SaveViewState 需要创建我们上面使用的 savingState 数组:

protected override object SaveViewState() {
  var stateToSave = new List<object> { repeaterData, base.SaveViewState() };
  return stateToSave.ToArray();
}

不要忘记使用如下代码在 Init 或 Load 中绑定中继器:

if( !IsPostBack ) {
  // Bind your repeater here.
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当你无法使用ViewState时你会做什么? 的相关文章

随机推荐

  • SQL 和唯一的 n 列组合

    Oracle 有没有一种简单的方法来查询 n 个字段的唯一组合 我有非常简单的两场解决方案 CREATE TABLE combinations AS SELECT 1 AS n FROM DUAL UNION ALL SELECT 2 FR
  • 如何使用 ng-style 设置 li:before 的 css

    我想用可变范围 宽度 更改 li before 的宽度值 ul li span step stepName uppercase span li ul 我正在执行这段代码 但它不起作用 请帮助 不幸的是你不能拥有pseudoelements
  • 启用基于客户位置的付款方式

    我不知道是否可能 但是 我们需要为巴塞罗那添加一些不同的付款方式 因此 我们的想法是 如果客户居住在巴塞罗那地区 加泰罗尼亚 他将看到与西班牙其他地区不同的信用卡付款方式和银行转账账户 WooCommerce 可以做到这一点吗 Thanks
  • Codeigniter - 从 where_in 中删除单引号

    我有两个疑问 genres this gt db gt select Group Concat intGenreId strDJGenres gt from tblDJGenres gt where intDJId this gt sess
  • 使用 rustdoc 生成 markdown 文档?

    有没有办法在 doc 中生成单个 markdown 文件 评论 多个 Markdown 文件 doc main md doc foo md等 也很好 我是 Rust 新手 虽然生成的 HTML 文档很好 但我主要生活在命令行上 真的不想为了
  • .setValue() 不能始终适用于 Google Sheets 脚本

    我一直在努力处理我在 Google Sheet 中编写的一段脚本 该脚本的目的是监视给定单元格的输入值 来自键盘 并验证输入是否遵循数据输入标准 例如 所有输入值必须遵循标准XX XX X 举个例子 A5 03 1是可以接受的 而B555
  • Swift:反映 NSManagedObject 子类的属性

    当使用 Mirror 访问 NSManagedObject 子类的内部结构时 所有托管变量都将被忽略 public class Foo NSManagedObject NSManaged var bar String var f Foo c
  • Windows 7 上的端口转发

    如何在 Windows 7 上将端口 xxx 上的传入请求重定向到 localhost yyy 开发服务器 相对于 2008 仅允许从本地主机访问 这还不够好 我需要从不同的计算机测试我的应用程序 感谢大家的建议 尽管我自己找到了答案 我下
  • 将数据存储在 iPhone 本地

    我正在构建一个应用程序 我想在设备本地存储用户信息 而不使用任何服务器数据库 但一切都在设备端 我希望存储特定的用户位置并将其显示在表格视图中 因此即使用户稍后启动应用程序 我也可以提取历史记录并向历史记录表提供过去的位置 基本上是本地数据
  • 使用PHP将制表符转换为空格以进行HTML显示?

    我需要在网页中显示一个纯文本文件 其中包含两个空格制表符的数据列 我所做的是使用 PHP 读取文本文件并将其打印出来 pre 标签使用等宽字体 如下所示 pre pre pre
  • Visual Studio 中 Qt 特定结构的缩进损坏

    VS编辑器中的自动缩进显然不知道Qt 信号和槽的声明会自动格式化 如下所示 class MyClass public QObject Q OBJECT public MyClass signals lt Broken indentation
  • 有没有 PHP 函数可以将数字转换为带有千位分隔符的货币?

    有没有PHP函数可以转换integer十亿和千万 900800 gt 9 00 800 500800 gt 5 00 800 正如您所添加的Yii在你的问题标签中 你可以这样做Yii的方式如下 Yii app gt language en
  • 由于视图模型为空,将剔除应用于填充的表单而不擦除表单的数据?

    我有一个脚本 通过将空视图模型应用到我的表单来初始化淘汰赛 当用户在表单中输入数据时 视图模型会相应更新 这是预期的行为 JavaScript var viewModel myField ko observable init functio
  • 是否可以在 Visual Studio Code 中为 Java 项目选择 JDK 8?

    我正在尝试使用 Visual Studio Code 来编译和运行基于 Maven 的 Java 项目 VSCODE 本身需要 JDK 11 我安装了 JDK 11 并将其添加为 VSCODE Java 配置 Java 运行时 部分中的 j
  • 动态类型与对象类型

    我交替使用了动态类型和对象类型 这两种类型有什么区别吗 使用其中一种对性能有什么影响吗 其中哪一个更灵活 They re hugely不同的 如果你使用dynamic您选择动态类型 从而在很大程度上选择退出编译时检查 是的 它的性能比使用静
  • 在多模块 Maven 构建中重用 ant-snippets

    如何在多个项目中重复使用 Ant 代码片段 假设我的根目录中有以下内容pom xml
  • 检查 Python 列表中是否存在某些内容

    我有一个元组列表Python http en wikipedia org wiki Python 28programming language 29 并且我有一个条件 仅当元组不在列表中时我才想采用分支 如果它在列表中 那么我不想采用 if
  • 使用 Spring Boot 实现 2 路 SSL

    我正在创建一些宁静的 Web 服务 并使用 Spring Boot 创建嵌入式 tomcat 容器 要求之一是实现 2 路 SSL 我一直在查看 HttpSecurity 对象 并且可以使用以下方法让它仅通过 SSL 通道运行 Web 服务
  • 对于 4 KB 小文件来说,最佳的压缩算法是什么?

    我正在尝试将 TCP 数据包压缩为大约 4 KB 大小 数据包可以包含任何字节 从 0 到 255 我发现的所有压缩算法基准都是基于较大的文件 我没有找到任何比较不同算法对小文件的压缩率的内容 这正是我所需要的 我需要它是开源的 这样它就可
  • 当你无法使用ViewState时你会做什么?

    我有一个相当复杂的页面 它在转发器内动态构建用户控件 该转发器必须在 Init page 事件期间绑定ViewState已初始化 否则动态创建的用户控件将不会保留其状态 这创建了一个有趣的 Catch 22 因为我将转发器绑定到的对象需要在