1

Description des problèmes:Impossible de déclencher la méthode JavaScript à partir du code-behind en utilisant Update Panel

Après avoir enregistré les données dans DB, je dois montrer une alerte à l'utilisateur. Pour cela, j'ai enregistré le script du code-behind. Mais il est ne fonctionne pas avec le panneau de mise à jour alors qu'il fonctionne comme prévu sans panneau de mise à jour. Je dois le faire fonctionner avec le panneau de mise à jour.

J'ai essayé en ajoutant $(document).ready(function() lors de l'enregistrement du script, mais cela n'a pas fonctionné.

Ensuite, j'ai essayé avec la méthode ScriptManager.RegisterClientScriptBlock() au lieu de Page.ClientScript.RegisterStartupScript(), mais cela ne fonctionnait pas non plus.

Voici l'extrait de code de la page Web (ASPX):

<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
     <asp:Button ID="btnOutsideUpdatePanel" runat="server" Text="Outside UpdatePanel" OnClick="btnOutsideUpdatePanel_Click" /> 
     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
      <ContentTemplate> 
       <asp:Button ID="btnInsideUpdatePanel" runat="server" Text="Inside UpdatePanel" OnClick="btnInsideUpdatePanel_Click" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
     <uc1:Child runat="server" id="Child1" /> 
     <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
      <ContentTemplate> 
       <uc1:Child runat="server" id="Child2" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </form> 
</body> 

Voici l'extrait de code d'utilisateur contrôle (ASCX):

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Child.ascx.cs" Inherits="UpdatePanelAndScript.Child" %> 
<asp:Button ID="btnUserControl" runat="server" Text="User Control" OnClick="btnUserControl_Click" /> 

code-behind de page web :

protected void btnOutsideUpdatePanel_Click(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowSuccess", "alert('Hi');", true); 
} 

protected void btnInsideUpdatePanel_Click(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowSuccess", "alert('Hi');", true); 
} 

code-behind de l'utilisateur contrôle:

protected void btnUserControl_Click(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowSuccess", "alert('Hi');", true); 
} 

Répondre

1

Il vous suffit de modifier la déclaration suivante:

Page.ClientScript.RegisterStartupScript 
(
    this.GetType(), 
    "ShowSuccess", 
    "alert('Hi');", 
    true 
); 

Pour:

ScriptManager.RegisterStartupScript 
(
    this, 
    this.GetType(), 
    "ShowSuccess", 
    "alert('Hi');", 
    true 
); 

Référence:

Enregistrement Mise à jour de page partielle Scripts compatibles
[...] Si vous êtes rendu script pour utilisation à l'intérieur d'un contrôle UpdatePanel, assurez-vous que vous appelez les méthodes du contrôle ScriptManager.

+0

Oui, cela a fonctionné dans l'extrait de code ci-dessus. Merci Mais, après avoir intégré dans le code de la base réelle, il ne fonctionne pas comme prévu (Il travaille en partie) .. Problème Description: J'ai un contrôle de fichiers AJAX Uploader l'intérieur du panneau de mise à jour. Cas 1: Lorsque j'ajoute la propriété update-panel "updateMode = 'conditionnel" ", la fenêtre contextuelle fonctionne comme prévu. Mais le contrôle qui est conservé en dehors du panneau de mise à jour n'est pas rendu après la publication partielle. Cas 2: Et je supprime la propriété du panneau de mise à jour "updateMode = 'conditionnel" ", la fenêtre ne fonctionne pas du tout , c'est-à-dire que le script ne s'enregistre pas dans le DOM. –

+0

_ "Mais le contrôle qui reste en dehors du panneau de mise à jour n'est pas rendu après la publication partielle" _. Votre contrôle est généré dynamiquement? Pouvez-vous fournir le code requis pour reproduire votre problème? – krlzlx