web-dev-qa-db-fra.com

RegisterStartupScript ne fonctionne pas avec ScriptManager, Updatepanel. Pourquoi donc?

protected void timer1_Tick(object sender, EventArgs e)
    {
        foreach (RepeaterItem item in rpChat.Items)
        {
            TextBox txt = item.FindControl("txtChatMessage") as TextBox;
            if (txt != null)
            {
                message[i] = txt.Text;
                i--;
            }
        }
        lblStatusChat.Text = "";
        RepeaterBind();
        string javaScript = "<script language=JavaScript>\n" + "alert('Button1_Click client-side');\n" + "</script>";

        Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", javaScript);
    }

timer_click trigggers et panneau de mise à jour. Et le message d'alerte ne s'affiche pas lors de l'événement timer_tick

38
sly_Chandan

Lorsque vous utilisez le panneau de mise à jour, vous ne pouvez pas appeler javascript comme ci-dessus. Vous devez utiliser 

ScriptManager.RegisterStartupScript

Alors changez votre 

Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", javaScript);

à 

ScriptManager.RegisterStartupScript(updatePanelId,updatePanelId.GetType()
                                                      , "alert", javaScript, true);
98
Akash KC

Vous devez utiliser la classe ScriptManager parce que vous êtes un script d’inscription pour la publication et l’utilisation de updatepanel. 

MSDN: ScriptManager.RegisterStartupScript

ScriptManager.RegisterStartupScript Méthode utilisée pour ajouter un script client à une page lorsque le contrôle est encapsulé dans un UpdatePanel.

Page ASPX 

<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Label ID="lblDisplayDate" runat="server" Text="Label"></asp:Label>
         <asp:Button ID="btnPostback" runat="server" onclick="btnPostback_Click" 
        Text="ClickMe" />
    </ContentTemplate>
</asp:UpdatePanel>
</div>

CodeBehind Enregistrer le script de démarrage 

protected void btnPostback_Click(object sender, EventArgs e)
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append(@"<script language='javascript'>");
    sb.Append(@"var lbl = document.getElementById('lblDisplayDate');");
    sb.Append(@"lbl.style.color='red';");
    sb.Append(@"</script>");

    ScriptManager.RegisterStartupScript(btnPostback,this.GetType(), "JSCR", sb.ToString(),false);

}

Détail: Ajouter JavaScript par programme à l'aide de RegisterStartupScript lors d'une publication asynchrone

9
Pranay Rana

Dans mon cas, ScriptManager.RegisterStartupScript n'a pas fonctionné aussi.

Pas de travail:

ScriptManager.RegisterStartupScript(Me, 
  Me.GetType(), 
  String.Format("Data{0}", Me.ID), 
  "<script>alert(111);</script>", 
  False)

Travail:

ScriptManager.RegisterStartupScript(Me.Page, 
  Me.GetType(), 
  String.Format("Data{0}", Me.ID), 
  "<script>alert(111);</script>", 
  False)

Me dans l'exemple est mon contrôle personnalisé hérité de System.Web.UI.WebControls.WebParts.WebPart

6
feeeper

Ce doit être un peu plus tard, mais j'ai trouvé la solution ici http://forums.asp.net/p/1117430/5483679.aspx/1

Vous devez utiliser System.Web.UI.ScriptManager.RegisterClientScriptBlock au lieu de Page.ClientScript.RegisterStartupScript

2
Kaly

Cela fonctionne pour moi quand je le fais comme ça

Private Sub test()
        ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), "k1", "alert('hello')", True)
    End Sub

mais quand j'ajoute SweerAlert cela ne fonctionnera pas

Private Sub test()
            ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), "k1", "swal('Please Provide All Valid Message Information!')", True)
        End Sub

avez-vous une idée pourquoi cela ne fonctionne pas.

0
SMHasnain