Asp.net 避免在动态创建的控件上进行回发

Asp.net 避免在动态创建的控件上进行回发,asp.net,Asp.net,我有一个页面,当用户浏览一系列问题时,会动态生成控件 当他们完成表单时,他们单击提交按钮,我收集他们输入的信息并将其存储在数据库中 目前,我正在使用创建其中几个控件 .AutoPostBack = True 因此,每次用户将文本和选项卡更改到下一个字段时,都会发生回发,并且下一个字段会失去焦点 如果我设定 .AutoPostBack = False 然后焦点问题消失了,但在我收集数据的最后,用户在这些控件中输入的内容实际上对客户端代码都不可用,因为它们还没有发布 我想执行以下操作之一: 在最

我有一个页面,当用户浏览一系列问题时,会动态生成控件

当他们完成表单时,他们单击提交按钮,我收集他们输入的信息并将其存储在数据库中

目前,我正在使用创建其中几个控件

.AutoPostBack = True
因此,每次用户将文本和选项卡更改到下一个字段时,都会发生回发,并且下一个字段会失去焦点

如果我设定

.AutoPostBack = False
然后焦点问题消失了,但在我收集数据的最后,用户在这些控件中输入的内容实际上对客户端代码都不可用,因为它们还没有发布

我想执行以下操作之一:

  • 在最后有一个大回帖
  • 在我离开控件时,在不丢失控件焦点的情况下进行标准回发
  • 还有什么我没想到的

  • 有什么建议吗?

    我处理这些问题已经有一段时间了,但我记得需要重新添加动态控件(页面加载,或init?我忘记了),确保每个动态添加的控件的ID与添加时相同,然后才能从ViewState访问用户输入的任何数据

    我还记得使用SessionState跟踪我添加的内容,因此我知道需要为ViewState构造什么


    当时做这件事的感觉和现在描述它的声音一样糟糕。祝你好运。

    我已经有一段时间没有处理这些问题了,但我记得需要重新添加动态控件(页面加载,或init?我忘记了),确保在从ViewState访问任何用户输入的数据之前,我保证每个动态添加的控件的ID与添加时相同

    我还记得使用SessionState跟踪我添加的内容,因此我知道需要为ViewState构造什么


    当时做这件事的感觉和现在描述它的声音一样糟糕。祝你好运。

    在页面生命周期中添加控件时,动态创建控件的键是。要保留viewstate并使动态控件保持发布的值,需要在不迟于
    OnInit()
    添加控件

    此外,无论是否回发,每次页面加载时都需要重新添加控件。关于@KennyZ所说的保证每个控件具有相同的ID,只要您以相同的顺序添加相同数量的控件,.NET将保证ID相同

    关于
    AutoPostBack
    属性,通常仅当我们希望执行由用户更改控件值触发的某些操作时,才会将其设置为True。一个常见的例子是下拉列表;根据用户选择的内容,不同的数据会加载到页面的详细信息部分。因此,每次用户更改值时,我们都希望回发并获取新数据以显示


    根据我对您的用例的理解,我建议对整个表单进行一次回发。

    在页面生命周期中添加控件时,动态创建控件的关键是。要保留viewstate并使动态控件保持发布的值,需要在不迟于
    OnInit()
    添加控件

    此外,无论是否回发,每次页面加载时都需要重新添加控件。关于@KennyZ所说的保证每个控件具有相同的ID,只要您以相同的顺序添加相同数量的控件,.NET将保证ID相同

    关于
    AutoPostBack
    属性,通常仅当我们希望执行由用户更改控件值触发的某些操作时,才会将其设置为True。一个常见的例子是下拉列表;根据用户选择的内容,不同的数据会加载到页面的详细信息部分。因此,每次用户更改值时,我们都希望回发并获取新数据以显示


    根据我对您的用例的理解,我建议对整个表单进行一次回发。

    您可以在回发之间使用viewstate存储和检索数据。您可以在回发之间使用viewstate存储和检索数据。