为什么没有我的控件显示在面板时,试图从asp控件拉它

本文关键字:控件 asp 我的 显示 为什么 | 更新日期: 2023-09-27 18:12:47

所以我有一个动态构建的表,它是由一个方法创建的,并加载到一个面板中,它像一个占位符,当它加载到页面中时,它的工作很好,当我上传页面。表格出现并按照我想要的方式加载。我唯一的问题是,我有两个下拉框的选项,用户选择更新表的这些列。问题是,当我去点击我的更新按钮,它搜索页面对应的控件(即下拉框中的值),得到适当的值来更新表,将在下面解释。

这就是我对我的更新按钮所做的:

        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()是这样的:

        public static Control FindControlRecursive( Control root, string id )
    {
        System.Web.UI.Control controlFound;
        if ( root != null )
        {
            controlFound = root.FindControl( id );
            if ( controlFound != null )
                return controlFound;
            foreach ( Control c in root.Controls )
            {
                controlFound = FindControlRecursive( c, id );
                if ( controlFound != null )
                    return controlFound;
            }
        }
        return null;
    }

Update1 它所做的是,当它到达findcontrol方法时,它无法在面板中找到表,因此它返回null并且无法更新表。

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

任何帮助或建议都是非常感谢的。

谢谢

为什么没有我的控件显示在面板时,试图从asp控件拉它

何时创建表?如果你是动态创建一个表,它必须重新创建不迟于OnInit为视图状态能够被恢复。

为什么不试试这个递归查找控件:

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所说的也很重要——在你用Update方法访问它之前,你的表是否用数据和用户输入重新创建/初始化了?