【问题标题】:(New to ViewStates) What is the best way(s) to save a dynamically generated control into the viewstate?(ViewStates 的新手)将动态生成的控件保存到视图状态的最佳方式是什么?
【发布时间】:2011-11-29 22:59:39
【问题描述】:

我正在 Asp.net 中创建一个 Web 应用程序,但我还是个新手。我刚刚开始了解 ViewState 的基础知识。在我的应用程序中,人们正在通过数据库进行搜索,我为他们提供了缩小搜索范围的方法。当他们输入有效的搜索约束(例如:10/1/11 之后的日期)时,我会动态添加另一组控件,允许他们添加另一个约束。我想保存上一个约束(一组控件)的内容,以便当他们进入下一个约束时我仍然可以将它放在网页上。

如果有任何区别,一个约束集由属性下拉列表、一些文字控件和一或两个文本字段组成,具体取决于从下拉列表中选择的属性。

我该怎么办?

非常感谢大家。

【问题讨论】:

    标签: asp.net dynamic controls viewstate


    【解决方案1】:

    查看此链接:

    动态控件的 ViewState 仍然由 ASP.NET 框架维护。只需确保在初始化或预初始化期间添加它们,因为在初始化和加载阶段之间的每个控件都会加载视图状态。

    【讨论】:

      【解决方案2】:

      跟踪动态控件的视图状态的最简单方法是在OnInit 中重新创建控件,并在每次回发页面时为控件分配相同的 ID。如果控件在每次创建时都分配了相同的 ID,则在加载 ViewState 时,将重新填充控件。

      protected override void OnInit(EventArgs e)
      {
          TextBox txt = new TextBox();
          txt.ID = "txt1";
          this.Controls.Add(txt);
      }
      

      编辑

      为了让事情变得更简单,请尝试使用 DynamicControlsPlaceHolder。只需将控件放在页面上,它就会在后台持久化控件及其值:

      http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

      【讨论】:

      • 我正在尝试您的解决方案,因为它看起来相当简单。我正在运行一个问题,只是将原始值保存到视图状态中。特别是,我试图将整数变量计数保存到视图状态中,这样我就知道我创建了多少动态控件。 ViewState.Add("count", count);和 ViewState["count"] = count;两者似乎都不起作用。或者至少我的 ViewState["count"] != null 总是失败。知道我做错了什么吗?
      • 将值保存到 ViewState 应该没有问题。你遇到了什么问题?
      • 它也可能有助于添加我尝试加载的位置。我已经尝试从 Page_Init 函数和 Page_Load 函数中加载计数值,但都没有成功。
      • 它似乎并没有真正节省。 ViewState["count"] 总是计算为 null。即使我将其保存为第一条评论中的归属。
      • 通过调试,我了解到这些值实际上已添加到 ViewState 变量中,但似乎不会通过回发持续存在。我是否需要明确保存 ViewState?我应该在 ViewState 结构中添加键值对的特定位置吗?目前,我在按钮单击事件期间添加到 ViewState。
      猜你喜欢
      • 2010-12-05
      • 2015-07-02
      • 2018-08-14
      • 2015-04-28
      • 2023-04-04
      相关资源
      最近更新 更多