Question

J'ai créé 2 commandes pour manipuler un objet de données:. 1 pour l'affichage et un autre pour l'édition

Sur une page je charge la « vue » UserControl et transmettre des données à cette façon:

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

C'est tout bien et à l'intérieur du contrôle, je peux saisir les données et l'afficher.

Maintenant, je suis en train de suivre une approche similaire pour l'édition. J'ai un autre contrôle utilisateur pour ce (avec quelques zones de texte pour l'édition) à laquelle je passe les données originales de la même façon que je l'ai fait pour la vue:

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

Ce qui fonctionne aussi très bien.

Le problème est maintenant d'apprendre à ces données. Lorsque l'utilisateur clique sur un bouton je dois récupérer les données qui ont été modifiées et faire des choses avec elle. Ce qui se passe est que parce que les contrôles sont ajoutés par programme, les données que l'utilisateur a modifié ne semble pas être accessible partout.

Y at-il une solution pour cela? Ou est cette façon d'essayer de garder les choses séparées et peut-être réutilisable impossible?

Merci à l'avance.

Était-ce utile?

La solution 3

Voici ma solution:

Dans la page, je garde une référence au contrôle qui est chargé d'un programme. Dans la commande I créé une méthode GetData () qui retourne un objet avec les données saisies par l'utilisateur. Lorsque le requérant fournit l'utilisateur la forme, la page appelle la méthode GetData () sur le contrôle pour accéder aux données entrées par l'utilisateur.

Autres conseils

Il suffit de garder une référence à la commande comme une variable dans le code-behind de la page. I.e..

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

Tant que vous créez le contrôle dans la partie droite du cycle de vie de la page (initialisation), puis ViewState sera maintenue. Je suppose dataToEdit est juste un TextBox ou quelque chose?

Les contrôles créés doivent être ajoutés dynamiquement sur Init ou un événement PreInit sur la page.

Vous devez le faire ici parce que l'état des commandes est pas encore chargé. Si vous ajoutez le contrôle après que vous les aurez vides depuis la page des valeurs de la page de contrôle déjà rempli au début du cycle de vie de la page.

En savoir plus sur le cycle de vie page

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top