Per rispondere effettivamente al tuo quesiton, così come tutti gli altri non vogliono che tu lo faccia, e sono d'accordo ... Ho fatto questo genere di cose prima.
La prima cosa che farei è che la pagina implementi un'interfaccia.
Nel controllo:
IVansFannelDataProviderPage provider = this.Page as IVansFannelDataProviderPage; if (provider != null) { //grab data from interface } else throw YouCantPutThisControlOnThisKindOfPageException();
non è il modo più elegante per farlo, ma quando abbiamo avuto un sacco di controlli che vogliono condividere un oggetto molto costoso questa misura la fattura.
Questo funziona bene, ma rende il controllo inutilizzabile su pagine che non implementano l'interfaccia - e ciò rende i controlli troppo strettamente accoppiati alla pagina. Tutti gli altri che dicono di avere i dati della pagina dai controlli sono corretti; metti i controlli sulla pagina, non le pagine nei controlli.
Si dovrebbe avere un buon motivo per farlo. Per noi: il carico dell'oggetto condiviso era molto costoso e avere la pagina caricata/salvata indipendentemente dal controllo su quell'oggetto era abbastanza utile.
Era un peccato che un sacco di pagine che non implementavano realmente l'interfaccia dovevano essere installate per fornire una sorta di supporto o supporto proxy solo per far funzionare i controlli, e reso le pagine e i controlli tanto meno riutilizzabile.
Se dovessi ricominciare da capo, avrei la pagina inviare i dati ai controlli con gli eventi, probabilmente attraverso la riflessione se dovessi essere pigro.
questa è una grande risposta, ma non posso usarlo perché i controlli sono caricati dinamicamente. Forse userò campi nascosti. Grazie. – VansFannel
È necessario utilizzare ViewState per mantenere lo stato del controllo. – Oded
E come posso mantenere i valori delle proteste pubbliche su ViewState? Sto provando a farlo, ma myIntValue è sempre zero. – VansFannel