Comment forcer le post-retour complet à partir d'un bouton dans un UpdatePanel?
Vous pouvez utiliser la propriété Triggers de UpdatePanel pour enregistrer les actions qui déclenchent une publication complète.
Ajoutez un PostBackTrigger object à cette propriété, contenant le ControlID du contrôle devant déclencher une publication complète.
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<ContentTemplate>
...
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="myFullPostBackControlID" />
</Triggers>
</asp:UpdatePanel>
J'ajoute simplement ceci parce que personne d'autre ne l'a. Il est possible de faire cela dans code-behind dans une ligne de code sans aucune des méthodes précédentes. Il suffit de mettre ceci dans page_load:
Visual Basic
ScriptManager.GetCurrent(Me).RegisterPostBackControl(myButtonID)
C #
ScriptManager.GetCurrent(this).RegisterPostBackControl(myButtonID);
De ici :
Utilisez le contrôle PostBackTrigger pour permettre aux contrôles d'un UpdatePanel de générer une publication au lieu d'effectuer une publication asynchrone.
<Triggers>
<asp:PostBackTrigger ControlID="controlID" />
</Triggers>
J'ai eu le même problème en utilisant un ImageButton à l'intérieur d'un WebDataGrid.
Je mets plutôt la ligne de EvilDr dans le pré-rendu pour la webdatagrid. A bien fonctionné!
for (int i = 0; i < wdgMyData.Rows.Count; i++)
{
ScriptManager.GetCurrent(this).RegisterPostBackControl((ImageButton)wdgMyData.Rows[i].Items[3].FindControl("btnDownloadExcel"));
}
C'est une vieille question, il y a une approche un peu délicate aussi, quand tout est dans panneaux de mise à jour et que vous voulez faire un post complet pour que votre Document.Ready code fonctionne au clic.
1. Créez un bouton factice en dehors du panneau de mise à jour et cliquez dessus à partir du code situé derrière, comme ceci
ScriptManager.RegisterStartupScript(Page, this.GetType(), "ResetDoc", "ResetDocumentReady();", true);
2. Définit la fonction sur le devant comme ceci
function ResetDocumentReady() {
$("[id$=DummyButton]").click();
}
NOTE: Mais le meilleur moyen est d'utiliser trigger, la réponse publiée par @Thibault Falise :)