我正在动态创建一个包含每个单元格中的文本框的表。该表放在占位符控件中。一切都很完美。问题是当我去检索在单元格中输入的值时。我有代码在一个名为CreateTable()的单独方法中生成表。为了让我的程序在我去保存时在占位符中找到一个表,我必须在回发事件和PageLoad事件中运行CreateTable()。如果我只在其中一个地方调用CreateTable()并尝试保存,则表示占位符为空,因此我无法保存文本框内容。我尝试从InitLoad调用CreateTable(),但这不起作用,因为它需要引用三个静态控件的值:1个下拉列表,1个列表框和1个日历控件,我认为它们还没有渲染其viewstate 。有人有主意吗?为了使这项工作成功,不必将数据库调用的数量加倍。
答案 0 :(得分:0)
欢迎来到ViewState和动态控件的精彩世界: - )
如果同时使用(ViewState和动态控件),则必须在每个请求中重新创建控件,因为需要重新创建ViewState。在控件创建代码(CreateTable?)和代码中拆分代码以填充控件(FillTable?)。控件创建代码的最佳位置是PageInit事件。这是必须在每个请求中运行的代码的一部分。将其他代码放在任何需要的地方(Postback?,LoadEvent?)。这部分代码必须运行一次。在此之后它是ViewState的一部分。
如果代码的控件创建部分依赖于ViewState(静态控件的值),则会遇到更大的麻烦。您无法访问PageInit中的ViewState!使用另一个存储方法(SessionState?)来保存此信息并重定向到您自己的页面。