母版页中的嵌入式Javascript或使用母版页的页面抛出“对象预期错误”

时间:2010-06-08 22:07:30

标签: asp.net javascript master-pages contentplaceholder

我是使用母版页编写ASP.Net应用程序的半新手,我遇到了一个我花了一些时间但似乎无法解决的问题。

我的情况是我有一个主页面,其结构如下所示:

<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外部文件中,它将完美运行。

我似乎无法弄清楚为什么会这样。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

修改

尝试使用像fiddler这样的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" />