代码之家  ›  专栏  ›  技术社区  ›  davidsleeps

在回发时生成动态控件(ASP.NET)

  •  2
  • davidsleeps  · 技术社区  · 15 年前

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

    在init事件中,如何最好地存储有关在postback等上生成动态控件的信息…

    例如,采用经典的“问卷”方案…question.aspx?ID=1

    1. 从查询字符串中获取ID
    2. 从何处加载问题并动态构建控件, 或动态添加每个问题 用户控制多少次 问题等
    3. 回发页面帖子(用户按提交,我想!)
    4. 在初始化事件中… 你应该在哪里 已经 将ID存储到 重新创建问题控件?

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

    • 我最初将值存储在 视图状态,因为它与 但viewstate值不是 在页面初始化中可用(还是??)
    • 一个隐藏变量,然后访问表单集合中的值
    • 会话-我不想使用会话,似乎有问题,例如,如果用户查看两个问卷怎么办?
    • 又是查询字符串?但这似乎太容易改变和动态控制只是没有意义…
    • 控制自己?例如,一起忽略问卷ID,然后简单地去掉问题ID??假设控件ID的格式与ControlQ类似,例如ControlQ1、ControlQ2。这意味着每个问题ID必须是唯一的

    非常感谢您的帮助/指导等!!!!

    2 回复  |  直到 15 年前
        1
  •  1
  •   M4N    15 年前

    在回发过程中查询字符串仍然可用,因此您可以从中获取ID。

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

        2
  •  0
  •   karlis    15 年前

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

    使用viewstate来持久化在回发过程中需要重新实例化用户控件的信息。要将回发数据映射到ControlTree,必须确保具有相同的控制树。在映射之后,您可以更改ControlTree(加载一些其他控件,例如)

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