ASP.NET C'è un modo migliore per trovare i controlli che sono all'interno di altri controlli?

StackOverflow https://stackoverflow.com/questions/1987418

  •  22-09-2019
  •  | 
  •  

Domanda

Al momento ho un menu a discesa all'interno di un controllo ascx. Ho bisogno di "trovare" dal di dentro il codice dietro su un altro ascx che si trova sulla stessa pagina. Il suo valore viene utilizzato come parametro per un ObjectDataSource su ascx # 2. Attualmente sto usando questo brutto pezzo di codice. Funziona ma mi rendo conto se l'ordine conrtol dovesse cambiare o varie altre cose, non sarebbe dove mi aspetto. Qualcuno ha qualche consiglio come dovrei correttamente facendo questo?

if(Page is ClaimBase)
{
  var p = Page as ClaimBase;
  var controls = p.Controls[0].Controls[3].Controls[2].Controls[7].Controls[0];
  var ddl = controls.FindControl("ddCovCert") as DropDownList;
}

Grazie e felice anno nuovo !! ~ Ck a San Diego

È stato utile?

Soluzione

In generale ho implementare un "FindInPage" o la funzione ricorsiva FindControl quando hai un sacco di controllo trovando fare, dove si sarebbe solo passare un controllo e sarebbe ricorsivamente scendere l'albero di controllo.

Se è solo una cosa una tantum, in considerazione esponendo il controllo necessario nella vostra API in modo da poter accedere direttamente.

public static Control DeepFindControl(Control c, string id)
{
   if (c.ID == id)
   { 
     return c;
   }
   if (c.HasControls)
   {
      Control temp;
      foreach (var subcontrol in c.Controls)
      {
          temp = DeepFindControl(subcontrol, id);
          if (temp != null)
          {
              return temp; 
          }
      }
   }
   return null;
}

Altri suggerimenti

esporre una proprietà sulla classe del controllo utente che restituirà il valore desiderato. Lasciate che l'accesso alla pagina di proprietà.

Solo il controllo utente deve sapere quali controlli sono all'interno di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top