在ASP.NET MVC中,添加脚本引用会引发异常

时间:2010-02-12 18:21:38

标签: asp.net-mvc routing

在Visual Studio创建的骨架ASP.MVC上,我在Site.Master的head部分添加了一个脚本标记:

<script src="~/Scripts/jquery-1.3.2.js" type="text/javascript"></script>

这会导致页面无法呈现。在我的例子中,我有一个自定义的controllerfactory,基本方法GetControllerInstance引发了一个异常:

  

路径控制器   '/ ~/Scripts/jquery-1.3.2.js'不能   被发现或者没有实现   一个IController。

对src使用“../../Scripts/jquery-1.3.2.js”也不起作用。

唯一可行的方法是:

<script src="<%= Url.Content("~/Scripts/jquery-1.3.2.js") %>"
    type="text/javascript"></script>

然后当然,intellisense对jquery不起作用。所以我不得不求助于添加黑客:

<% if (false) { %>
    <script src="~/Scripts/jquery-1.3.2.js" type="text/javascript"></script>
<% } %>

修补程序应该根据ScottGu

修复

上面一行是样式表的链接:

<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />

出于某种原因,这很好。无论我使用虚拟路径还是相对路径,我都可以看到页面上生成的URL是“Content / Site.css”。 jquery url也不能这样说。 jquery链接按原样返回 - 在包含“〜”或“../..".

的页面上返回jquery url

有人可以告诉我发生了什么事吗? 感谢

更新

感谢评论者,我记得〜是一个asp.net的东西。我唯一的问题是为什么样式表不存在相同的问题?上面的链接标签,例如,我可以放〜或相对路径,它总是出来正确。魔术在哪里?

3 个答案:

答案 0 :(得分:1)

你试过没有~

<script src="/Scripts/jquery-1.3.2.js" type="text/javascript"></script>

~字符仅由指示网站根目录的服务器端处理脚本使用。原因是:

<script src="<%= Url.Content("~/Scripts/jquery-1.3.2.js") %>" type="text/javascript"></script>

作品是因为它被翻译成:

<script src="/Scripts/jquery-1.3.2.js" type="text/javascript"></script>

答案 1 :(得分:0)

标准HTML中不支持“〜” - 它是一个ASP.NET快捷方式。所以你要么按照你在OP中指定的方式和智能感知的黑客来做,要么就像Darin指定的那样,但是你失去了自动获取你的VRoot的能力。

答案 2 :(得分:-1)

我不确定,但也许MVC很聪明,不能在路由中包含CSS文件。