Pregunta

He creado 2 controles para manipular un objeto de datos:. 1 para la visualización y otro para la edición

En una página cargo el UserControl "vista" y pasar los datos de esta manera:

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

Eso es todo bien y dentro del control que puede tomar esos datos y mostrarlo.

Ahora estoy tratando de seguir un enfoque similar para la edición. Tengo un control de usuario diferente para este (con algunas cajas de texto para la edición) a la que pasan los datos originales de la misma manera que hice para la vista:

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

Lo que también funciona bien.

El problema ahora es llegar a estos datos. Cuando el usuario hace clic en un botón que necesito para recuperar los datos que se editan y hacer cosas con ella. Lo que pasa es que debido a que los controles se agregan mediante programación, los datos que el usuario cambiado no parece estar en cualquier lugar accesible.

¿Hay una solución para esto? O es esta manera de tratar de mantener las cosas separado y posiblemente no reutilizable posible?

Gracias de antemano.

¿Fue útil?

Solución 3

Aquí está mi solución:

En la página, I mantener una referencia al control que se carga mediante programación. En el control creé un método GetData () que devuelve un objeto con los datos introducidos por el usuario. Cuando el usuario somete la forma, la página se llama al método GetData () en el mando a acceder a los datos que el usuario ha introducido.

Otros consejos

Hemos de tener una referencia al control como una variable en la página de código subyacente. Es decir.

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; 
}

Mientras se está creando el control en la parte derecha del ciclo de vida de la página (inicialización), se mantendrá ViewState. Estoy asumiendo dataToEdit es sólo un TextBox o algo?

Los controles creados dinámicamente se deben añadir en Init o evento PreInit en la página.

Hay que hacerlo aquí porque los controles del estado aún no se ha cargado. Si se agrega el control después de que tendrá que vaciar desde la página ya está lleno valores de página de control temprano en el ciclo de vida de la página.

Más información sobre el ciclo de vida de la página aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top