0

我对使用母版页编写 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 外部文件中,它将完美运行。

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

4

1 回答 1

2

编辑:

尝试使用像 fiddler (fiddler2.com/fiddler2) 这样的 http 分析器来查看脚本是否实际加载。问题可能是 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" />
于 2010-06-08T22:16:45.467 回答