2010-03-25 3 views
1

J'ai un GridView, à l'intérieur d'un UserControl, à l'intérieur d'un UpdatePanel sur une page.ASP.NET GridView et UpdatePanel

Il y a un Button dans le GridView qui doit déclencher un PostBack. Ce qui se passe est: Clics de l'utilisateur Button ->RowCommand Fires -> événement personnalisé est déclenché sur UserControl -> Page détecte cela et modifie l'index de vue active pour un MultiView et également le titre de la page et d'autres contrôles en dehors du UpdatePanel. Le problème est que la page affiche de manière asynchrone, le titre de la page change, mais les actions nécessitant un PostBack complet ne se produisent pas car un PostBack complet ne se produit pas.

Pour enregistrer le bouton comme un déclencheur PostBack J'utilise:

ImageButton btnResults = e.Row.FindControl("btnResults") as ImageButton; 
ScriptManager scrCurrent = ScriptManager.GetCurrent(this.Page); 
if (btnResults != null && scrCurrent != null) { 
    scrCurrent.RegisterPostBackControl(btnResults); 
} 

Je sais que c'est un peu un problème compliqué, mais je voudrais vraiment apprécier toute aide.

+0

Pouvez-vous poster votre balisage pour le bouton image? – Nix

+0

Y a-t-il d'autres éléments dans ce contrôle utilisateur que vous souhaitez provoquer des publications asynchrones ou est-ce le seul bouton qui provoque des publications? – cptScarlet

+0

Ce bouton était la seule chose. Voir la réponse ci-dessous. – Echilon

Répondre

1

La solution éventuelle était d'utiliser le code ci-dessus tel quel, mais dans l'événement RowCreated au lieu de RowDataBound. Évidemment, l'une des bizarreries d'ASP.NET, parfois l'ordre des événements est surprenant et apparemment imprévisible. Pour la même raison, j'ai toujours trouvé préférable d'enregistrer JavaScript le plus tard possible, donc j'utilise généralement l'événement SaveStateComplete.