2

我确定这已经得到解答,但我找不到它......也许是因为这些术语用于许多不同的问题......无论如何。

如何在初始化事件中存储有关在回发等上构建动态控件的信息的最佳方式...

例如,采用经典的“问卷调查”场景...question.aspx?id=1

  1. 从查询字符串中获取 id
  2. 从任何地方加载问题并动态构建控件,或动态添加每个问题用户控件以获取多少个问题等
  3. 页面回帖(我猜用户按下提交!)
  4. 在初始化事件中......您应该在哪里存储id 以重新创建问题控件?

到目前为止我尝试过/想到的事情:

  • 我最初将值存储在视图状态中,因为它与页面相关,但视图状态值在页面初始化中不可用(或者它是??)
  • 一个隐藏变量,然后访问表单集合中的值
  • session - 我不想使用 session,似乎有问题,例如如果用户查看两个问卷怎么办?
  • 再次查询字符串?但这似乎太容易改变了,动态控制就没有意义了……
  • 在控件本身?例如,完全忽略调查问卷的 ID,也许只是简单地关闭问题 ID?假设控件 ID 将采用某种格式,例如 controlQ#,例如 controlQ1、controlQ2。这意味着每个问题 id 必须是唯一的

非常感谢任何帮助/指导等!!!

4

2 回答 2

1

查询字符串在回发期间仍然可用,因此您可以从那里获取 ID。

如果您担心用户操纵查询字符串参数,那么也许您应该添加一些额外的参数,以便您在回发期间验证查询字符串的正确性。作为一个简单的示例,您可以添加 ID 参数和当前会话 ID 的 MD5 哈希,并在回发期间重新创建/比较该校验和。

于 2010-01-17T23:18:45.240 回答
0

尝试在 OnLoad 页面中创建/加载用户控件。如果要在用户控件中加载其他用户控件,请使用 OnInit 事件。

使用视图状态来持久化您需要在回发期间重新实例化用户控件的信息。要将回发数据映射到控制树,您必须确保拥有相同的控制树。在该映射之后,您可以更改您的控制树(加载一些其他控件,例如)

contols-id:是的,你必须给他们唯一的 id,否则它将不起作用。如果您将问题存储在数据库中,则为此使用数据库主键应该没有任何问题,因此将它们命名为例如 question-1、question-2(控件)

于 2010-01-17T12:49:47.450 回答