2012-07-25 33 views
38
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 y panel de actualización. Y el mensaje de alerta duerma aparezca en caso timer_tickRegisterStartupScript no funciona con ScriptManager, Updatepanel. ¿Porqué es eso?

Respuesta

93

Cuando se utiliza panel de actualización entonces usted no puede llamar a javascript como la de arriba. Usted tiene que utilizar

ScriptManager.RegisterStartupScript 

Así Cambie su

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

a

ScriptManager.RegisterStartupScript(updatePanelId,updatePanelId.GetType() 
                 , "alert", javaScript, true); 
+0

Estoy atrapado con ASP.NET 2.0 donde no se puede dar la ID del panel para que esto no funcione. ¿Alguna sugerencia? –

+1

Al pasar el ID del panel de actualización y el tipo es incorrecto, pase 'this.Page' y' this.GetType() 'a él, en su lugar. – modiX

9

Es necesario usuario de la clase ScriptManager porque eres registrarse guión al hacer la devolución de datos y el uso de UpdatePanel

MSDN: ScriptManager.RegisterStartupScript

método utilizado para añadir ScriptManager.RegisterStartupScript cliente secuencia de comandos a una página cuando el control se ajusta dentro de un UpdatePanel.

página 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 Registro de inicio Guión

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); 

} 

Detalle: Add JavaScript programmatically using RegisterStartupScript during an Asynchronous postback

5

En mi caso, ScriptManager.RegisterStartupScript tampoco funcionaba.

no funciona:

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

trabajo:

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

Me en el ejemplo es mi control personalizado heredado de System.Web.UI.WebControls.WebParts.WebPart

+0

El '.Page' adicional funcionó también para mí para que el script se registrara en' MasterPage'. –

0

Funciona para mí cuando lo hago como esto

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

pero cuando agrego SweerAlert a él no lo puedo trabajar

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

¿tiene alguna idea de por qué, no vale obras.

+0

¿Puede ser que no haya importado sweetalert en su página? O puede ser su swal ('Por favor, proporcione toda la información válida del mensaje!') Se ejecuta antes de agregar sweetalert – feeeper

Cuestiones relacionadas