2010-06-08 55 views
0

我是使用母版頁編寫ASP.Net應用程序的新手,我遇到了我花了一些時間但似乎無法解決。在母版頁或使用母版頁拋出「Object Expected Error」的頁面中嵌入的Javascript

我的情況是,我有一個母版頁,看起來像這樣的結構:

<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> 

然後我有一個使用該母版頁的頁面包含以下內容:

<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> 

當我運行這個頁面並點擊圖片時,我得到一個"Object Expected"錯誤。

但是,如果我將測試函數放到我的Default.js外部文件中,它將會完美運行。

我似乎無法弄清楚爲什麼會發生這種情況。有任何想法嗎?

回答

2

編輯:使用http分析儀就像招潮蟹(fiddler2.com/fiddler2),看看是否該腳本實際加載

嘗試。問題可能在於你正在加載的腳本的aspx頁面的相對路徑不正確。路徑總是相對於正在執行的aspx而不是主頁的位置。如果腳本未加載,函數test()永遠不會存在,因此會出錯。

在你的頭試試這個以確保路徑總是正確

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

,而不是

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

在這一點上我擁有一切註釋掉用於測試目的。最初,我有四個額外的外部js文件正在引用我正在使用的日曆控件。 另一個有趣的事情是,這個頁面工作完美,直到我將主頁面添加到組合中。一旦我這樣做,這個錯誤開始發生。 我也使用內置的VS開發服務器來測試它,不知道這是否會有所作爲。 – Philter 2010-06-09 13:30:59

+0

經過一些進一步的測試,如果在母版頁或實際內容頁面中引用了任何外部js文件,它似乎會給我js對象預期錯誤。如果我評論所有外部包含內嵌腳本正常工作。 – Philter 2010-06-09 14:08:26

+0

很難說如果不能查看代碼,但我懷疑其中一個文件中有一些未完成的對象正在層疊,導致test()不會被註冊爲全局文件。你有沒有嘗試過只包含Default.js兩次或另一個只有alert('空腳本')這樣良性聲明的測試腳本; ?如果它通過,一次添加一個腳本。如果失敗,請嘗試使用Jint庫進行追蹤。 http://www.ehow.com/how_4791439_code-javascript-lint-visual-studio.html – Laramie 2010-06-09 17:33:18