在我的global.asax中,我有如下所示的URL路由设置:
routes.MapPageRoute("User Logon", "{Vendor}/Logon", "~/Logon.aspx");
在logon.aspx页面中,我有一个“设计”登录按钮的脚本:
<link href="jquery/css/flick/jquery-ui-1.8.1.custom.css" rel="stylesheet" type="text/css" />
<link href="images/style.css" rel="stylesheet" type="text/css" />
<script src="jquery/js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="jquery/js/jquery-ui-1.8.1.custom.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#<%= ButtonLogon.ClientID %>').button();
});
</script>
当我访问页面时,我们使用url(在调试模式下)http://localhost/logon.aspx?v=1页面正确加载并正确加载jquery按钮命令。但后来我使用新的url路由访问页面,我收到此错误。
Microsoft JScript运行时错误:预期的对象
任何人都知道为什么会这样?
感谢。
答案 0 :(得分:3)
这是因为HTML中的相对路径。
当您以http://your.domain/Logon.aspx
访问您的网页时,相对网址jquery/js/jquery-1.4.2.min.js
会解析为http://your.domain/jquery/js/jquery-1.4.2.min.js
并正确加载。
但是当您以http://your.domain/xxx/Logon.aspx
访问它时,该URL会解析为http://your.domain/xxx/jquery/js/jquery-1.4.2.min.js
,并且由于您的服务器上确实没有名为xxx
的文件夹,服务器将返回404并且脚本无法加载。因此,当您随后尝试访问该脚本中定义的函数和变量时,会出现错误。
要解决此问题,您应该使用绝对路径 - 即/jquery/js/jquery-1.4.2.min.js
(注意前导斜杠),或使用ResolveUrl
(或Url.Content
)方法正确映射URL - 即<%= Url.Content( "~/jquery/js/jquery-1.4.2.min.js" ) %>
后一个选项更可取,因为它不依赖于您的应用程序托管在域的根目录。