2009-04-07 7 views
6

Dans un Master page J'ai le balisage suivantcorps runat = « server » provoquant d'erreur de compilation

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

J'ai mis runat="server" parce que je dois être en mesure d'accéder à l'élément de corps en code-behind.

Je voudrais maintenant ajouter un appel de fonction JavaScript à l'événement body onload, comme ceci:

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

Cependant, cela génère mon erreur de compilation, avec un message de « ne peut pas résoudre someJavaScriptFunction symbole() ". Si je cours l'application j'obtiens une erreur me disant

Compiler Error Message: CS1026:) expected

Que se passe-t-il ici? onload est un événement côté client, alors pourquoi le compilateur ASP.NET se soucie-t-il de cela?

Répondre

15

Vous devez ajouter ceci dans le code derrière;

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

Ajout runat="server" à une balise rend une balise de serveur, même si ce n'est pas l'un des plus explicitement préfixés (par exemple <asp:Panel />). Sur les balises de serveur, tous les gestionnaires d'événements onXXXX gèrent les événements côté serveur, pas les événements côté client (sauf lorsque "client" est explicitement appelé, par exemple avec OnClientClick pour les boutons).

+0

OK, je peux voir comment cela fonctionnerait - mais pourquoi ajouter runat = "serveur" signifie que je dois utiliser cette approche? –

+0

Je pense que c'est parce qu'il cherche la méthode Body_SomeJavaScriptFunction dans le code derrière, parce que vous lui avez dit de "courir au serveur"? –

+0

Correct ... J'ai ajouté votre réponse Ian, j'espère que cela ne vous dérange pas :) –

3

Il est également une option pour définir:

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

Cela se produit parce que ASP tente d'interpréter le script dans la balise body dans le cadre du code de la page. Comme si c'étaient C#/VB ...

+0

Cela ne répond pas aux questions "Que se passe-t-il ici?" et "pourquoi le compilateur ASP.NET se soucie-t-il de cela?" – Cerebrus

+0

C'est l'approche que j'ai suivie à la fin, dans mon scénario. –

Questions connexes