2010-06-08 26 views
0

Je suis semi-nouveau à écrire des applications ASP.Net en utilisant des pages maîtres et j'ai rencontré un problème sur lequel j'ai passé du temps mais ne peut pas sembler résoudre.Javascript incorporé dans la page maîtresse ou les pages qui utilisent la page maître jettent "Object Expected Error"

Ma situation est que j'ai une page principale avec une structure qui ressemble à ceci:

<head runat="server"> 
    <title>Test Site</title> 
    <link rel="Stylesheet" type="text/css" href="Default.css" /> 
    <script type="text/javascript" language="javascript" src="js/Default.js" /> 
    <meta http-equiv="Expires" content="0"/> 
    <meta http-equiv="Cache-Control" content="no-cache"/> 
    <meta http-equiv="Pragma" content="no-cache"/>   
    <asp:ContentPlaceHolder ID="cphHead" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server">  

     <div id="divHeader"> 
     <asp:ContentPlaceHolder ID="cphPageTitle" runat="server"></asp:ContentPlaceHolder> 
     </div> 

     <div id="divMainContent"> 
     <asp:ContentPlaceHolder ID="cphMainContent" runat="server"></asp:ContentPlaceHolder> 
     </div> 
    </div> 
    </form> 
</body> 

J'ai alors une page qui utilise cette page principale qui contient les éléments suivants:

<asp:Content ContentPlaceHolderID="cphHead" runat="server"> 
    <script type="text/javascript" language="javascript" >  

     function test() { 
      alert("Hello World"); 
     } 
</script> 
</asp:Content> 

<asp:Content ContentPlaceHolderID="cphMainContent" runat="server"> 
    <fieldset>   
     <img alt="Select As Of Date" src="Images/Calendar.png" id="aAsOfDate" class="clickable" runat="server" onclick="test();" />    
     <asp:Button runat="server" CssClass="buttonStyle" ID="btnSubmit" Text="Submit" OnClick="btnSubmit_Clicked"/>    
    </fieldset> 
</asp:Content> 

Quand je cours cette page et clique sur l'image j'obtiens une erreur "Object Expected". Cependant, si je place la fonction de test dans mon fichier externe Default.js, il fonctionnera parfaitement.

Je n'arrive pas à comprendre pourquoi cela se produit. Des idées?

Répondre

2

EDIT:

Essayez d'utiliser un analyseur http comme Fiddler (fiddler2.com/fiddler2) pour voir si le script est en fait de charger. Le problème est probablement que le chemin relatif de la page ASPX est incorrect pour le script que vous chargez. Le chemin est toujours relatif à l'aspx en cours d'exécution, pas à l'emplacement de la page principale. Si le script n'est pas chargé, la fonction test() n'existe jamais d'où l'erreur.

Essayez dans votre tête pour vous assurer que le chemin est toujours correct

<script type="text/javascript" language="javascript" src='<%= Page.ResolveClientUrl("~/js/Default.js") %>' ></ script>

au lieu de

<script type="text/javascript" language="javascript" src="js/Default.js" /> 
+0

A ce stade, j'ai tout le reste commenté à des fins de test. À l'origine, j'avais quatre fichiers js externes supplémentaires qui étaient référencés pour un contrôle de calendrier que j'utilise. L'autre chose intéressante est que cette page a fonctionné parfaitement jusqu'à ce que j'aie ajouté la page maître dans le mélange. Une fois que je l'ai fait, cette erreur a commencé à se produire. Je suis également en train de tester cela en utilisant le serveur de développement VS intégré, je ne sais pas si cela ferait une différence. – Philter

+0

Après quelques tests supplémentaires, il semble me donner l'erreur js Object Expected s'il y a des fichiers js externes référencés dans la page maître ou sur la page de contenu réelle. Si je commente tous les externes inclut dehors le manuscrit intégré fonctionne correctement. – Philter

+0

Il est difficile de dire sans être capable de regarder le code, mais je soupçonne qu'il y a quelque chose d'inachevé dans l'un de ces fichiers qui est en cascade, provoquant le test() ne pas être enregistré comme global. Avez-vous essayé d'inclure simplement le Default.js deux fois ou un autre script de test qui n'a qu'une instruction bénigne comme alert ('script vide'); ? Si ça passe, ajoutez vos scripts en un à la fois. Si cela échoue, essayez d'utiliser la bibliothèque Jint pour le retrouver. http://www.ehow.com/how_4791439_code-javascript-lint-visual-studio.html – Laramie