2011-02-14 25 views
16

He usado código como este en el pasado para abrir con éxito un mensaje de alerta en mi página web asp.net. Ahora no está funcionando. No puedo entender por qué.El código ScriptManager.RegisterStartupScript no funciona, ¿por qué?

ScriptManager.RegisterStartupScript(this, typeof(Page), UniqueID, 
    "alert('This pops up')", true); 

¿Alguna idea?

+0

Probé ScriptManager.RegisterStartupScript (this, typeof (Page), "12344", "alerta ('Esto aparece')", verdadero); y funcionó perfectamente bien para mí. Compruebe el origen de la página para ver si está emitiendo el código y si está bien. – rsapru

+0

Es porque el registro de una secuencia de comandos con ScriptManager solo se está registrando. Necesita algo para activarlo, como un evento de clic de botón – Fandango68

Respuesta

36

De la parte superior de mi cabeza:

  • Uso GetType() en lugar de typeof(Page) con el fin de obligar a la secuencia de comandos para su clase de página real en lugar de la clase base,
  • pasar una constante de tecla en lugar de Page.UniqueID, que no es tan significativo, ya que se supone que debe ser utilizado por los controles mencionados,
  • poner fin a su declaración de Javascript con un punto y coma,
  • registrar la secuencia durante la fase de PreRender:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    ScriptManager.RegisterStartupScript(this, GetType(), "YourUniqueScriptKey", 
     "alert('This pops up');", true); 
} 
+4

Faltaba el; . Se agregó y funcionó. ¡Gracias! – TheMoot

+0

No, no puedo trabajar. DEBE usar la ID del UpdatePanel actual en lugar de "this" – vNext

+2

@vNext, ¿qué quiere decir? El primer argumento para [RegisterStartupScript()] (http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerstartupscript.aspx) es un 'Control' o una' Página', dependiendo de en la sobrecarga utilizada, nunca una cadena. –

18

Prueba este código ...

ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "script", "alert('Hi');", true); 

Dónde UpdatePanel1 es el id para Updatepanel en su página

+0

sí, tienes razón.DEBEMOS usar ID del UpdatePanel actual :-) – vNext

+0

Si tiene un Repeater dentro de un Ajax UpdatePanel e intenta registrar un javascript desde el OnItemCommand del Repeater, debe hacerlo de esta manera. Esta definitivamente debería ser la respuesta preferida. –

0

me encontré con un problema similar. Sin embargo, este problema fue causado por la forma en que diseñé las páginas para presentar las solicitudes. Coloqué todos mis archivos .js como último elemento para aplicar a la página, por lo tanto, están al final de mi documento. Los archivos .js tienen todas mis funciones incluidas. El administrador de scripts parece que para poder llamar a esta función necesita el archivo js ya presente con la función que se está llamando en el momento de la carga. Espero que esto ayude a los demás.

1

Debe añadir el ID del UpdatePanel en el primer argumento si el control haciendo que el guión está dentro del UpdatePanel persona utilice la palabra clave 'esto' en lugar de panel de actualización aquí es el código

ScriptManager.RegisterStartupScript(UpdatePanel3, this.GetType(), UpdatePanel3.UniqueID, "showError();", true); 
Cuestiones relacionadas