Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在尝试从asp控件中拉出控件时,面板中没有显示任何控件_C#_Asp.net_Html_Controls - Fatal编程技术网

C# 为什么在尝试从asp控件中拉出控件时,面板中没有显示任何控件

C# 为什么在尝试从asp控件中拉出控件时,面板中没有显示任何控件,c#,asp.net,html,controls,C#,Asp.net,Html,Controls,因此,我有一个动态构建的表,它是由一个方法创建的,并加载到一个面板中,该面板充当它的占位符。当将它加载到页面中时,当我上载页面时,它工作正常。桌子上来了,正好按我想要的方式装载。我唯一的问题是,我有两个下拉框,其中包含用户选择用来更新表中这些列的选项。问题是,当我点击我的更新按钮时,它会在页面中搜索相应的控件(即Dropbox中的值),该控件将获得适当的值来更新表,下面将对此进行解释 这就是我使用“更新”按钮所做的: protected void Update_Click(obj

因此,我有一个动态构建的表,它是由一个方法创建的,并加载到一个面板中,该面板充当它的占位符。当将它加载到页面中时,当我上载页面时,它工作正常。桌子上来了,正好按我想要的方式装载。我唯一的问题是,我有两个下拉框,其中包含用户选择用来更新表中这些列的选项。问题是,当我点击我的更新按钮时,它会在页面中搜索相应的控件(即Dropbox中的值),该控件将获得适当的值来更新表,下面将对此进行解释

这就是我使用“更新”按钮所做的:

        protected void Update_Click(object sender, EventArgs e)
    {
      UpdateFail.Visible = false;
      UpdateSucceed.Visible = false;
      string MachineTypeID;
      string MachineModelID;
      string machinetypeid;
      string machinemodelid;
      int i = 0;
      machine = inputsService.GetMachineSiteDetails(SiteID);
      foreach (Machine Machine in machine)
      {
          try
          {                  
              machinetypeid = Machine.ID.ToString() + "type";
              machinemodelid = Machine.ID.ToString() + "model";
              Control type = MyExtensions.FindControlRecursive(this, machinetypeid);
              Control model = MyExtensions.FindControlRecursive(this, machinemodelid);
              RadComboBox machinetype = (RadComboBox) type;
              RadComboBox machinemodel = (RadComboBox) model;
              MachineTypeID = machinetype.SelectedValue;
              MachineModelID = machinemodel.SelectedValue;
              if (MachineTypeID != "")
              {
                  inputsService.UpdateMachineModels(Machine.ID, MachineModelID);
                  i++;
              }
              if (MachineModelID != "")
              {
                  inputsService.UpdateMachineTypes(Machine.ID, MachineTypeID);
                  i++;
              }
          }
          catch (Exception ex)
          {
              {
                  logger.ErrorFormat(
                      "Update_Click exception occurred when attempting to update the database {0}", ex);
              }
          }
      }
      if (i != 0)
      {
          UpdateFail.Visible = false;
          UpdateSucceed.Visible = true;
      }
      else
      {
          UpdateSucceed.Visible = false;
          UpdateFail.Visible = true;
      }
      //clear out the old table and replace with the newly revized table.
      AddTable();
    }
现在我的问题与下面的两行代码有关

                  Control type = MyExtensions.FindControlRecursive(this, machinetypeid);
              Control model = MyExtensions.FindControlRecursive(this, machinemodelid);
MyExtensions.FindControlRecursive()方法如下:

更新1 它所做的是,当它到达findcontrol方法时,它在pannel中找不到表,因此它返回null并无法更新表

我想知道的是,我在这里做错了什么,如何解决这个问题

非常感谢您的帮助或建议


谢谢

您什么时候创建表?如果要动态创建表,必须在OnInit之前重新创建该表,才能还原viewstate。

为什么不尝试此递归查找控件:

public static Control FindControlRecursive(this Control Root, string Id)
{
    if (Root.ID == Id)
        return Root;

    foreach (Control Ctl in Root.Controls)
    {
        Control FoundCtl = FindControlRecursive(Ctl, Id);
        if (FoundCtl != null)
            return FoundCtl;
    }

    return null;
}

Shai所说的也很重要-在您使用更新方法访问表之前,是否正在使用数据和用户输入重新创建/初始化表?

您实际上没有解释它在做什么/不在做什么。
public static Control FindControlRecursive(this Control Root, string Id)
{
    if (Root.ID == Id)
        return Root;

    foreach (Control Ctl in Root.Controls)
    {
        Control FoundCtl = FindControlRecursive(Ctl, Id);
        if (FoundCtl != null)
            return FoundCtl;
    }

    return null;
}