ASP.NET MVC相对路径没有打破JavaScript IntelliSense?

时间:2009-03-16 10:49:51

标签: javascript asp.net-mvc intellisense

向视图添加脚本通常包含以下内容:

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

不幸的是,如果应用程序部署在IIS 6下的虚拟目录中,这不起作用。讨论的替代方案here涉及使用Url.Content和“〜”动态解析路径,但这完全打破了JS IntelliSense。

有没有办法解决这个问题并使IntelliSense工作而不会失去在虚拟目录中部署应用程序的能力?

5 个答案:

答案 0 :(得分:3)

对于部署代码,您可以使用google ajax apis加载JQuery。建议使用谷歌CDN,因为它有助于页面加载时间。

获取intellisense将此添加到您的页面

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

这不会被发出,因为它在if(false)内,但是intellisense会识别它​​

答案 1 :(得分:1)

我使用这样的东西:

   <script src="<%= ResolveUrl("~/Content/jquery-1.2.6.js") %>" type="text/javascript"></script>   

   <%--<script src="../../Content/jquery-1.2.6.js" type="text/javascript"></script>--%> 

当您想要使用intellisense时,必须取消注释第二个引用。这很烦人,但是我遇到的唯一解决方法。

答案 2 :(得分:1)

查看JScript IntelliSense FAQ上的Visual Web Developer Team Blog。评论还引用了Srully的if(false)技巧。

答案 3 :(得分:1)

在VS2010中,一种在虚拟文件夹/目录中引用“* vsdoc.js文件并使Intellisense在不使用CDN的视图中正常工作的方法是在地址中使用localhost。虚拟目录是必不可少的当集中多个Web应用程序的脚本和内容文件时。在下面的示例中,我在IIS 7.5中创建了“共享”虚拟目录。希望这有助于某人。

@if (false)
{
   <script src="http://localhost/Shared/jQuery/js/jquery-1.7.2-vsdoc.js" type="text/javascript"></script>
}

答案 4 :(得分:0)

我创建了一个HtmlHelper扩展(PathReference是ReSharper的JetBrains.Annotations属性,可以省略):

public static class HtmlHelperExtensions
{
    public static MvcHtmlString Script(this HtmlHelper html, [PathReference]string scriptFile)
    {
        var filePath = VirtualPathUtility.ToAbsolute(scriptFile);
        return new MvcHtmlString("<script type=\"text/javascript\" src=\"" + filePath + "\"></script>");
    }
}

然后我在我的母版页中这样做

<%
    if (false)
    {
%>
    <script src="../../Scripts/jquery-ui-1.8.9.custom.min.js" type="text/javascript"></script&gt;
<%
    }
%>
<%:Html.Script("~/Scripts/jquery-ui-1.8.9.custom.min.js")%>

我现在有智能感知和正确的运行时引用。

(感谢Sruly的if(false)技巧)