Domanda

Ho un semplice controllo utente che ho creato che semplicemente permette all'utente di inserire la data. Per il momento, ha una sola casella di testo con ID = "tbDate". Sto cercando di aggiungere dinamicamente questo controllo più volte via (per esempio) placeholder.Controls.Add(LoadControl()) ma sto ricevendo l'errore "Una voce con la stessa chiave esiste già". Potrei, forse, cambiare l'ID degli elementi, ma allora sarebbe difficile afferrare il valore immesso dall'utente.
Qualcuno ha un'idea su questo?

Grazie!

È stato utile?

Soluzione

I generare un identificatore univoco come parte di una classe di componente che ho creato e quindi utilizzare tale valore come il Control.ID. È possibile generare questo valore unico in alcun modo vuoi ma io sono immagazzinarla come parte di una tabella di database. Alla fine non è così importante da quando la classe viene creata un'istanza i valori vengono inizializzati e costante per tutto il periodo della richiesta.

La classe ha una variabile di istanza privato:

private Control _control;

Quando si aggiunge il controllo al form (e, nello specifico, il segnaposto) faccio qualcosa di simile a questo. Si noti che i riferimenti c mia classe creata.

c.Control.ID = c.ComponentName + c.UniqueIdentifier;
phHere.Controls.Add(c.Control);

Poi quando devo riferimento al controllo in un secondo io essenzialmente invertire i passaggi precedenti:

string component = c.ComponentName + c.UniqueIdentifier;
UserControl uc = (UserControl)ph.FindControl(component);

Speriamo che questo aiuta. Se avete domande non esitate a chiedere. La radice del problema, tuttavia, è che il Control.ID deve essere impostato in modo da evitare l'errore.

Grazie

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