我是使用母版页编写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外部文件中,它将完美运行。
我似乎无法弄清楚为什么会这样。有什么想法吗?
答案 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" />