2009-08-24 6 views
3

Parce que les fichiers .ascx sont rendus naturellement au début du cycle de vie de la page, si je veux mettre à jour les informations sur un formulaire qui est en dehors de la partie .ascx, comment actualiser le fichier .ascx refléter les changements, dites sur le clic de bouton (le même qui sauve l'information)?Actualiser le contenu dans un fichier .ascx

Par exemple (pseudo-code):

Sub Page_load 
    'user control is naturally rendered here' 
End Sub 

Sub Button_Click 
    SaveStuff() 
    ReRenderUserControl() 
End Sub 

Répondre

3

Si vous créez un contrôle utilisateur créé en fonction des données sauvegardées. Ce que vous pouvez faire est de créer une méthode qui fait que la construction puis l'appeler dans la page et de contrôle utilisateur (pseudo-code):

UserControl:

protected Page_Load(object sender, EventArgs e) 
{ 
    BuildControlBasedOnData(); 
} 

public BuildControlBasedOnData() 
{ 
    // Build the user control based on saved data 
} 

Appel Page:

Button_Click(object sender, EventArgs e) 
{ 
    UserControl1.BuildControlBasedOnData();  
} 
3

Contrôles utilisateur (fichiers .ascx) sont rendus au cours du cycle de vie contenant de la page, comme vous le mentionnez. Lorsque vous effectuez un publipostage de clic sur la page contenant, lors du chargement de publication, le contrôle utilisateur sera complètement recréé. Si vous avez besoin le contrôle de l'utilisateur pour contenir différentes informations sur cette charge il y a beaucoup de choses que vous pouvez faire:

  • Dans votre contrôle de l'utilisateur, allez dans un magasin de données et renvoyer les informations requises lors de son événement de chargement ou tout autre bon événement (DataBind d'un contrôle, etc.)
  • Dans le chargement de la page de votre page contenant , attribuer des valeurs aux propriétés de votre UserControl que vous utilisez dans les différents aspects de l'utilisateur Control. Ces valeurs peuvent provenir d'un magasin de données ou d'une chaîne de requête ou de .

Il existe également de nombreuses autres options. Si vous parlez de postbacks partiels ou de trucs de type AJAXy, vous devrez probablement utiliser JavaScript pour mettre à jour les différentes parties de votre User Control (à moins que vous n'utilisiez UpdatePanels, ce que vous ne devriez pas faire parce qu'ils sont le diable) .

+0

cela ne me dit pas comment rendre le contrôle de l'utilisateur après que l'information a été sauvegardée en dehors de la fonction page_load ... – Jason

2

I est venu avec ce que je crois être une solution imparfaite, mais utilisable. Tout ce que je faisais était de faire fonctionner la fonction Page_Load dans mon fichier .ascx Public puis de l'appeler après la sauvegarde de mes informations. Cela a pris soin de mon problème.

Si quelqu'un a une solution plus élégante, s'il vous plaît faites le moi savoir!

+1

Vous ne devriez pas avoir à faire cela. Comme Phairoh le mentionne plus haut, les contrôles utilisateur suivent le cycle de vie de la page contenant. Vous pouvez exposer les propriétés publiques et les méthodes qui modifient votre contrôle utilisateur avant qu'il ne soit rendu. – CAbbott

+0

devrais-je simplement créer une méthode publique appelée 'ReRender' qui appelle juste la fonction' Page_load'? – Jason

+0

J'ai modifié ma réponse pour répondre à ce que je crois que vous essayez d'accomplir. C'est fondamentalement une méthode publique dans le contrôle de l'utilisateur qui peut être appelée pour reconstruire le contrôle comme bon vous semble. – CAbbott

Questions connexes