Domanda

Ho creato 2 controlli per manipolare un oggetto di dati:. 1 per la visualizzazione e un altro per l'editing

In una pagina si carica la UserControl "vista" e passare i dati ad esso in questo modo:

ViewControl control = (ViewControl)LoadControl("ViewControl.ascx");
control.dataToView = dataObject;
this.container.Controls.Add(control);

Questo è tutto bene e all'interno del controllo che può afferrare i dati e visualizzarli.

Ora sto cercando di seguire un approccio simile per la modifica. Ho un diverso controllo utente per questo (con alcune caselle di testo per la modifica) a cui passare i dati originali allo stesso modo ho fatto per la vista:

EditControl control = (EditControl)LoadControl("EditControl.ascx");
control.dataToEdit = dataObject;
this.container.Controls.Add(control);

Il che funziona anche bene.

Il problema ora è di arrivare a questi dati. Quando l'utente fa clic su un pulsante ho bisogno di recuperare i dati che sono stati modificati e fare cose con esso. Quello che sta succedendo è che perché i controlli vengono aggiunti a livello di codice, i dati che l'utente modificato non sembra essere accessibile ovunque.

C'è una soluzione per questo? O è questo modo di cercare di mantenere le cose separate e forse non riutilizzabile possibile?

Grazie in anticipo.

È stato utile?

Soluzione 3

Ecco la mia soluzione:

Nella pagina, continuo un riferimento al controllo che viene caricato programmazione. Nel controllo ho creato un metodo GetData () che restituisce un oggetto con i dati inseriti dall'utente. Quando l'utente invia il modulo, la pagina chiama il metodo GetData () sul controllo di accedere ai dati che l'utente è entrato.

Altri suggerimenti

Basta tenere un riferimento al controllo come variabile in code-behind della pagina. Cioè.

private EditControl control;

protected void Page_Init(object sender, EventArgs e)
{
   control = (EditControl)LoadControl("EditControl.ascx");
   control.dataToEdit = dataObject;
   this.container.Controls.Add(control);
}

protected void Button_Click(object sender, EventArgs e)
{
   var dataToEdit = control.dataToEdit; 
}

Fino a quando si sta creando il controllo nella parte destra del ciclo di vita della pagina (inizializzazione) allora ViewState sarà mantenuta. Sto assumendo dataToEdit è solo un TextBox o qualcosa del genere?

I controlli creati dinamicamente devono essere aggiunti su Init o evento PreInit sulla pagina.

Devi farlo qui perché lo stato dei controlli non è ancora caricato. Se si aggiunge il controllo dopo avrete li svuotano dal momento che la pagina già riempito valori di pagina di controllo nelle prime fasi del ciclo di vita della pagina.

Maggiori informazioni su ciclo di vita della pagina qui

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