动态加载的控件丢失值(ASP.NET)

动态加载的控件丢失值(ASP.NET),asp.net,.net-3.5,controls,Asp.net,.net 3.5,Controls,关于asp.net应用程序中动态加载的控件,我遇到了一个奇怪的问题 因此,有一个控件,用户必须在其中选择一些项目和/或进行一些文本输入(文本框)。控件依赖于单个下拉列表元素 所以用户A在这个下拉列表“controlselector”->中选择一个特定的值,将加载许多控件中的一个。之后,用户单击save,然后将其保存到数据库中 问题是,并非所有项目都保存到数据库中 我在每次页面加载时创建并重新创建控件,我已在“controlselector”上重新打开autopost,但控件是在页面加载事件时加载

关于asp.net应用程序中动态加载的控件,我遇到了一个奇怪的问题

因此,有一个控件,用户必须在其中选择一些项目和/或进行一些文本输入(文本框)。控件依赖于单个下拉列表元素

所以用户A在这个下拉列表“controlselector”->中选择一个特定的值,将加载许多控件中的一个。之后,用户单击save,然后将其保存到数据库中

问题是,并非所有项目都保存到数据库中

我在每次页面加载时创建并重新创建控件,我已在“controlselector”上重新打开autopost,但控件是在页面加载事件时加载的。尝试保存时,元素为空,但不是每个项目:(

似乎有时页面会记住值,有时却不会记住所有内容

谢谢

[编辑] 我看到的问题是,有2次动态填充动作。 1.)确定哪个控件,然后加载自定义控件 2.)用参数填充自定义控件

如果不想重新创建这些控件,则需要检查“IsPostBack”。。。它扼杀了你的价值观

试着把代码改成这样

Page_Load()
{
  if(IsPostBack == false){
   PlaceHolder.Clear();

  //with Createpath the path to the control is created and loaded
   PlaceHolder.Controls.Add(LoadControl(CreatePath(Selector.SelectedValue)));

   //some methods are started to fill some lists in the control
   ((MyCustomControl)PlaceHolder.Controls[0]).FillElements(someParameter);
  }
}
如果您不想重新创建这些控件,则需要检查“IsPostBack”。。。它扼杀了你的价值观

试着把代码改成这样

Page_Load()
{
  if(IsPostBack == false){
   PlaceHolder.Clear();

  //with Createpath the path to the control is created and loaded
   PlaceHolder.Controls.Add(LoadControl(CreatePath(Selector.SelectedValue)));

   //some methods are started to fill some lists in the control
   ((MyCustomControl)PlaceHolder.Controls[0]).FillElements(someParameter);
  }
}

页面加载在生命周期中太晚,无法创建动态控件,因为状态在加载事件之前恢复到控件。这意味着您需要更早地创建控件,否则ASP.Net在恢复状态时将看不到它。尝试在Init事件中创建它们。或者,最好尝试以下选项之一:

  • 创建一个自定义控件类型,根据需要进行自我调整,并在页面上具有该控件的常规实例
  • 将所有控件放置在页面上,但仅将所关心的控件设置为true

Page\u加载在生命周期中太晚,无法创建动态控件,因为在加载事件之前,控件的状态已恢复。这意味着您需要更早地创建控件,否则ASP.Net在恢复状态时将看不到它。尝试在Init事件中创建它们。或者,最好尝试以下选项之一:

  • 创建一个自定义控件类型,根据需要进行自我调整,并在页面上具有该控件的常规实例
  • 将所有控件放置在页面上,但仅将所关心的控件设置为true

    • 谢谢你的帮助,但问题出在完全不同的地方 动态加载到下拉列表中的项目(也动态加载)有一些“\n”特殊字符,但不是每个项目 这就是为什么不是每件东西都丢了,只是少了几件


      我不知道我是否应该/可以将此标记为答案,因为问题在另一个地方

      谢谢你的帮助,但问题在完全不同的地方 动态加载到下拉列表中的项目(也动态加载)有一些“\n”特殊字符,但不是每个项目 这就是为什么不是每件东西都丢了,只是少了几件


      我不知道我是否应该/可以将此标记为答案,因为问题在另一个地方

      您是否在UserControl中的所有控件上都启用了viewstate?是否在页面的其余部分以及整个UserControl本身上启用了ViewState?是的,我在UserControl上启用了ViewState…是否在UserControl中的所有控件上都启用了ViewState?是否在页面的其余部分和UserControl本身整体上启用了ViewState?是的,我在UserControl上启用了ViewState…当我将创建移动到page_init或oninit事件时,我的dropdownlist(决定需要加载哪个自定义控件)似乎还没有任何值。。所以控件正在加载我也尝试了你的第二个选择,将控件放在页面上,并将它们设置为可见或不可见。。。但问题仍然存在。。我认为这是因为控件需要一些参数来填充它们的dropdownlists((MyCustomControl)PlaceHolder.controls[0])。FillElements(someParameter);当我将创建移动到page_init或oninit事件时,我的dropdownlist(决定需要加载哪个自定义控件)似乎还没有任何值。。所以控件正在加载我也尝试了你的第二个选择,将控件放在页面上,并将它们设置为可见或不可见。。。但问题仍然存在。。我认为这是因为控件需要一些参数来填充它们的dropdownlists((MyCustomControl)PlaceHolder.controls[0])。FillElements(someParameter);