2009-04-01 8 views
1

Je rencontre des problèmes avec Server.Execute sur lequel je n'arrive pas à trouver de détails. Le Widget dans le code ci-dessus est un objet simple qui sait comment instancier un contrôle userc. Le WidgetProcessor prend un widget et ajoute le contrôle des widgets à la page. Cela fonctionne bien sur la charge initiale, il ne semble pas gérer les publications; il ne déclenche jamais les événements de contrôle utilisateur, il renvoie simplement la page d'origine comme si vous n'aviez jamais posté.ASP.NET Server.Execute

J'ai trouvé this article from 2003, bien que je pense qu'ils auraient réparé cela maintenant.

Toute aide serait appréciée.

Répondre

0

Je suppose que puisque vous ajoutez dynamiquement des contrôles à la page, ils ne sont pas enregistrés dans viewstate au bon moment et sont donc perdus. Lors de l'utilisation de contrôles dynamiques, vous devez ajouter à nouveau les contrôles ayant le même identifiant afin qu'ils soient récupérés et puissent donc enregistrer des publications.

+0

Ce n'est pas le problème, les événements de la page fonctionnent parfaitement bien tant que j'y accède directement sans utiliser Server.Execute. –

0

Vous devez charger le contrôle avant l'exécution de Page_Load. OnInit est généralement là où c'est fait. Cela signifie que le contrôle sera enregistré AVANT que les modifications de piste ViewState soient activées par ASP.NET. Le suivi des modifications est activé (juste avant que Page_Load soit déclenché). Toutes les modifications apportées à ViewState pour ce contrôle seront traitées comme étant sales et il n'y aura donc aucune différence entre les valeurs initiales et les valeurs modifiées. En outre, le moteur ViewState ne peut pas dire si les valeurs ont changé lors d'une publication si le contrôle est chargé après le suivi des modifications, car il ne dispose pas des valeurs d'origine à comparer.

+0

Ce n'est pas le problème, les événements de la page fonctionnent parfaitement bien tant que j'y accède directement et ne pas utiliser Server.Execute. –

0

Lorsque Server.Execute est utilisé, une URL lui est transmise en tant que paramètre et le contrôle passe à cette nouvelle page. L'exécution du code se passe sur la nouvelle page. Une fois l'exécution du code terminée, le contrôle revient à la page initiale, juste après l'endroit où il a été appelé. Cependant, dans le cas de Server.Transfer, cela fonctionne à peu près de la même manière, la différence étant que l'exécution s'arrête sur la nouvelle page elle-même (cela signifie que le contrôle n'est pas retourné à la page appelante). Dans les deux cas, l'URL dans le navigateur reste l'URL de la première page (ne s'actualise pas à l'URL de la nouvelle page) car le navigateur n'est pas invité à le faire.