私のコントロールのどれもが、ASPコントロールから引き出すときにパネルに表示されない

私はメソッドで作成され、それのプレースホルダーのように動作し、ページにロードするときに、ページをアップロードするときにうまく動作するパネルに読み込ま動的に構築されたテーブルを持っている。テーブルが現れて、私が望む方法を正確にロードします。私の唯一の問題は、ユーザーがテーブルの列を更新するために選択するオプションを持つ2つの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();
    }

今私の問題は、以下の2行のコードと関係がある

                  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 What it is doing is when it gets to the findcontrol method, it can't find the table within the pannel so it returns null and fails to update the table.

私が知りたいことは、ここで間違っていることと、この問題をどうやって解決できるのかです。

どんな助けや提案も大歓迎です。

ありがとうございました

0
あなたは実際にそれが何をしているかしていないかを説明していませんでした。
追加された 著者 James Johnson,

2 答え

あなたはいつテーブルを作成していますか?テーブルを動的に作成する場合は、ViewStateをリストアできるようにOnInitより後で再作成する必要があります。

1
追加された

なぜこの再帰的検索コントロールを試してみませんか:

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メソッドでアクセスする前に、データとユーザー入力で再作成/初期化されていますか?

1
追加された