在 ASP.NET 视图状态中存储 Dictionary

2024-02-19

我正在尝试存储一个Dictionary<string, string>在我为 ASP.NET 2.0 开发的自定义控件的 ViewState 中:

private Dictionary<String, String> Items
    {
        get
        {
            object d = ViewState["Items"];
            return (d == null ? null : (Dictionary<String, String>)d);
        }
        set
        {
            ViewState["Items"] = value;
        }
    }

访问它看起来像这样:

public void UpdateData
{
    if (this.Items == null)
        this.Items = new Dictionary<string, string>();
    else
        this.Items.Clear();
    //Fill the collection
}

当第一次加载页面时设置它,它看起来工作正常。但在随后的回发中,返回的值始终为 null(第一个条件总是发生)。调试显示已经可以了null在属性中的 ViewState 之外get.

我做了一些研究并且已经found http://msdn.microsoft.com/en-us/library/ms178652%28VS.85%29.aspx该类必须实现IStateManager可保存在 ViewState 中,并且词典 MSDN 页面 http://msdn.microsoft.com/en-us/library/xfhwa508%28v=VS.80%29.aspx似乎表明Dictionary<TKey, TValue>才不是。但我之前在 ViewState 中存储字典没有问题。这里发生了什么?我之前的经历是侥幸吗?

更新:我尝试向该属性添加一些测试代码:ViewState["ItemTest"] = "foo"; in the set and string test = (string)ViewState["ItemTest"]; in the get。像Dictionary,结果为空。所以这似乎不是问题Dictionary可序列化。另外,为了澄清,UpdateData是从我的RenderControl覆盖,发生在Page_Load在包含该控件的页面中。


您可以将字典存储在 ViewState 中,但您尝试在页面生命周期中执行此操作为时已晚。就像ViewState加载后一样Init,ViewState被保存before控件被渲染。将你的逻辑移出RenderControl并进入生命周期早期的另一个方法或事件处理程序,例如PreRender.

protected override void OnPreRender(EventArgs e)
{
    if (this.Items == null)
    {
        this.Items = new Dictionary<string, string>();
    }

    base.OnPreRender(e);
}

您将注意到,只要 ViewState 未在控件或其父级上禁用,该对象在后续回发中就不再为 null。

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

在 ASP.NET 视图状态中存储 Dictionary? 的相关文章

  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 为什么 set_symmetry_difference 无法与比较器一起使用?

    Example program include
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 根据所选单选按钮启用文本框

    我有一个单选按钮列表 其中列出了不同的业务类别 最后一个选项是Other类别 当用户选择Other类别 我希望能够启用一个文本框 用户可以输入更多信息来解释Other选择 目前 我正在尝试 If rblCategory SelectedIn
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • If else 在 Web 网格列中

    如何在 webgrid 列中添加条件 if else grid GetHtml tableStyle table table bordered columns grid Columns grid Column RealName Name g
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 为什么要使用字段而不是属性?

    我对 C 还很陌生 我认为属性是一件很棒的事情 事实上 这太棒了 以至于我看不出使用字段有任何真正的优势 即使对于私人领域 属性提供的灵活性和模块化似乎充其量可以让您避免严重的头痛 而最坏的情况则根本没有任何效果 我看到的字段的唯一优点是您
  • 将 iPhone X 旋转至横向时,封面图像左侧和下方出现空白

    今天出现了一个奇怪的问题 在测试一个简单的 即将推出 页面时 我的 iPhone X 上的背景图像在旋转到横向时没有填充整个视口 在 Chrome 和 Safari 中测试 产生问题的简化示例 html background url htt
  • 如何使这些按钮不显示为蓝色链接

    所以我只是想创建一个小网站 别担心这不会发生 作为标题 目前 主页 新闻 图库 和 关于我们 并不是指向另一个页面的实际按钮 当我做 a href Mainpage htm Home a 该按钮变成紫色并带有下划线 我知道这就是链接的显示方
  • 实体框架一对零或一外键关联

    我正在更改现有应用程序的后端以使用实体框架代码优先 我使用 Visual Studio 2015 中的内置工具根据现有数据库生成 POCO 类 这在大多数情况下都非常有效 除了两个具有一对零或一关系的类之外 这些是我的 简化的 课程 pub
  • 在 Shiny 中获取响应头变量

    我的 apache 将 LDAP 登录传递给变量X 远程用户在标题中 但我不知道如何在 Shiny 应用程序中获取它 有任何想法吗 也许解决方案可以是一些java脚本 好吧 我解决了 首先包含在ui Rjs函数 www js getLogi
  • Elasticsearch 自动完成或按令牌自动建议

    我想就如何基于标记完成术语提出建议 类似于谷歌的自动完成功能 但仅使用一个标记或单词 我想搜索将被标记化的文件名 例如 BRAND Connect A1233 jpg 被标记为 brand connect a1234 和 jpg 现在我想征
  • 如何在 Visual Studio 中搜索特定数据库表

    我在 Visual Studio 中有 6 个 dtsx 设计 文件 作业步骤 大多数情况下 作业步骤运行 sql 代码并删除 创建 复制表 如何搜索某个特定表格被触摸的位置 我尝试了 control F 并浏览了菜单中的搜索选项 我不认为
  • DataGridRow 上的 WPF DataGrid MouseOver

    我不明白为什么代码的第一部分不起作用 但第二部分却起作用 PART 1
  • 数据帧中值对出现的次数

    我有包含以下列的数据框 Name Surname dateOfBirth city country 我有兴趣找出最常见的名字和姓氏组合以及它出现的频率 如果能看到前 10 名组合的列表就好了 我对第一名的想法是 mostFreqComb d
  • AWS Lambda Java函数被多次调用

    我有一个AWS我用 Java 编写的 Lambda 函数 实际上是用 Clojure 编写的 每次运行它时它似乎都会被调用 3 次 我的函数在超时 设置为最长 5 分钟 内成功运行 它返回一个字符串 当我在控制台中测试该函数时 我可以看到输
  • 这是初始化 [ThreadStatic] 的线程安全方法吗?

    ThreadStatic private static Foo foo public static Foo CurrentFoo get if foo null foo new Foo return foo 前面的代码线程安全吗 或者我们需
  • 多核 CPU 中的核之间/跨核访问寄存器

    这可能听起来很疯狂 但我似乎不清楚是否有一个接口可供汇编程序员编写代码将内核 1 上的一个寄存器加载到内核 2 上的寄存器 例如 将内核 1 上的 EAX 加载到内核 2 上的 EAX 有可能吗 更多关于汇编程序员使用两个核心 在多个核心上
  • Python struct.error:结构格式中的错误字符

    首先我想知道这个python语句的作用 struct unpack sH len data 2 data 其次 我必须使用 python 发出 ICMP 请求消息 问题是我已经得到了老师给我的一些帮助代码 def step4 code se
  • 如何在java中检测日期是否在本周或下周内?

    如果我有一个事件的日期 例如 2011 01 03 如何在 java 中检测它是在本周还是下周内 有示例代码吗 Edit 我以为这是一个简单的问题 结果比我想象的要复杂 这周我吃的是 从上周日到这个周六 下周是从下周日到下周六 这部分取决于
  • Web - 使用 LocalStorage API 和 jQuery 删除选定的列表项

    作为或多或少的概念验证 我想使用 LocalStorage API 将列表项保存到存储中 我想出的方法有点复杂且效率低下 但对于删除单个列表项用例来说 它效果很好 下面是它的大致工作原理 使用 localStorage length 我使用
  • C语言中如何交换半字节?

    如何交换数字的半字节位置 例如 534 将其转换为二进制 最右边的4位必须与最左边的4位互换 然后用它组成一个新的数字 有人知道怎么做吗 肖恩 安德森 Sean Anderson 的小玩意指南 http graphics stanford
  • CMPedometer 计步功能不可用

    我的代码是 if CMPedometer isStepCountingAvailable self pedometer CMPedometer alloc init else NSLog Step counting is not avail
  • 为 linux bash 中的函数中的局部变量分配一个新值

    我有一个linux bash带有函数的脚本 myfunctiona local MYVAR1 one local MYVAR2 two echo MYVAR1 The line beneath is the line in question
  • 如何在 Ubuntu 中将 Java 从 1.6.0 降级到 1.5.0?

    我需要在 Ubuntu 中降级 Java 当前版本是 1 6 0 我必须为我的 Android 平台使用 JDK 1 5 0 怎么做 删除并重新安装 迟到的答案 但它可能会帮助那里的人 sudo add apt repository deb
  • 在 ASP.NET 视图状态中存储 Dictionary

    我正在尝试存储一个Dictionary