2009-04-07 38 views
6

En una página principal que tiene el siguiente marcadocuerpo runat = "server" causar error de compilación

<body id="body" runat="server"> 

he puesto runat="server" porque tengo que ser capaz de acceder al elemento del cuerpo en el código subyacente.

Ahora me gustaría añadir una llamada a la función JavaScript para el evento body onload, así:

<body id="body" runat="server" onload="someJavaScriptFunction();"> 

Sin embargo, esto está dando mi un error de compilación, con un mensaje de "No se puede resolver símbolo someJavaScriptFunction() ; ". Si ejecuto la aplicación, aparece un error al decirme

Compiler Error Message: CS1026:) expected

¿Qué está pasando aquí? onload es un evento del lado del cliente, ¿por qué el compilador de ASP.NET se preocupa por esto?

Respuesta

15

es necesario agregar esto en el código detrás;

protected void Page_Load(object sender, EventArgs e) 
{ 
    body.Attributes.Add("onload", "someJavaScriptFunction();"); 
} 

Adición runat="server" a una etiqueta hace que sea una etiqueta de servidor, incluso si no es uno de los prefijadas explícitamente los (por ejemplo <asp:Panel />). En las etiquetas de servidor, cualquier onXXXX controladores de eventos manejan los eventos del lado del servidor, no los eventos del cliente (a excepción de cuando "cliente" se llama explícitamente a cabo, por ejemplo, con OnClientClick para los botones).

+0

OK, puedo ver cómo funcionaría - pero ¿por qué la adición de runat = "server" decir que necesito utilizar este enfoque? –

+0

creo porque está buscando el método Body_SomeJavaScriptFunction en el código detrás, porque usted le dijo que "correr en el servidor"? –

+0

correcta ... Me adjuntas su respuesta Ian, espero que no le importe :) –

3

También es una opción para configurar:

<head> 
    <script language="text/javascript"> 
    window.onload = function() { someJavaScriptFunction(); } 
    </script> 
</head> 

Esto sucede porque ASP está tratando de interpretar la secuencia de comandos en el interior del cuerpo de la etiqueta como parte del código de la página. Como si se tratara de C#/VB ...

+0

Esto no responde a las preguntas "¿Qué está pasando aquí?" y "¿por qué el compilador de ASP.NET se preocupa por esto?" – Cerebrus

+0

Este es el enfoque con el que fui al final, en mi escenario. –

Cuestiones relacionadas