2009-04-07 7 views
6

In una pagina master Ho il seguente markupcorpo runat = "server" che causa errore di compilazione

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

Ho impostato runat="server" perché ho bisogno di essere in grado di accedere all'elemento corpo in code-behind.

Vorrei ora aggiungere una funzione chiamata JavaScript alla manifestazione body onload, in questo modo:

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

Tuttavia, questo sta dando il mio un errore di compilazione, con un messaggio di "Impossibile risolvere il simbolo someJavaScriptFunction() ;". Se eseguo l'applicazione ricevo un errore che mi dice

Compiler Error Message: CS1026:) expected

Cosa sta succedendo qui? onload è un evento lato client, quindi perché il compilatore ASP.NET si preoccupa di questo?

risposta

15

È necessario aggiungere questo codice nel codice sottostante;

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

Aggiunta runat="server" a un tag rende un tag server, anche se non è uno di quelli esplicitamente prefissati (ad esempio <asp:Panel />). Sui tag del server, qualsiasi gestore di eventi onXXXX gestisce gli eventi lato server, non gli eventi lato client (tranne quando viene chiamato esplicitamente "client", ad esempio con i pulsanti OnClientClick per).

+0

OK, posso vedere come funzionerebbe, ma perché aggiungere runat = "server" significa che devo usare questo approccio? –

+0

Penso perché sta cercando il metodo Body_SomeJavaScriptFunction nel codice sottostante, perché gli hai detto di "eseguire sul server"? –

+0

Corretto ... Ho aggiunto la tua risposta Ian, spero non ti dispiaccia :) –

3

E 'anche un'opzione per impostare:

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

Questo sta accadendo perché ASP sta cercando di interpretare lo script all'interno del tag body, come parte del codice nella pagina. Come se fosse C#/VB ...

+0

Questo non risponde alle domande "Cosa sta succedendo qui?" e "perché il compilatore ASP.NET si preoccupa di questo?" – Cerebrus

+0

Questo è l'approccio che ho seguito alla fine, nel mio scenario. –

Problemi correlati