向视图添加脚本通常涉及以下步骤:
<script src="../../Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>
不幸的是,如果在IIS 6下的虚拟目录中部署应用程序,这不起作用。讨论的备选方案在此涉及使用带有“~”的Url.Content动态解析路径,但这完全破坏了JS IntelliSense。
有没有办法解决这个问题,并使IntelliSense工作而不失去在虚拟目录中部署应用程序的能力?
向视图添加脚本通常涉及以下步骤:
<script src="../../Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>
不幸的是,如果在IIS 6下的虚拟目录中部署应用程序,这不起作用。讨论的备选方案在此涉及使用带有“~”的Url.Content动态解析路径,但这完全破坏了JS IntelliSense。
有没有办法解决这个问题,并使IntelliSense工作而不失去在虚拟目录中部署应用程序的能力?
请查看Visual Web Developer团队博客上的JScript IntelliSense FAQ。 评论中还提到了Srully的if(false)
技巧。
对于部署代码,您可以使用Google Ajax API加载JQuery。建议使用它,因为它通过使用Google CDN来帮助页面加载时间。
要获取智能感知,请将此添加到您的页面中
<% if(false){ %>
<script src="../../Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>
<%}%>
这不会被发出,因为它在 if(false) 内部,但 intellisense 会识别它。
我使用类似于这样的东西:
<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时,必须取消注释第二个引用。 这很烦人,但是我遇到的唯一解决方法。
在VS2010中,引用“*vsdoc.js”文件以在视图中正确使用智能感知而不使用CDN的一种方法是在虚拟文件夹/目录中使用localhost地址。虚拟目录在集中多个Web应用程序的脚本和内容文件时是必不可少的。在下面的示例中,我在IIS 7.5中创建了“Shared”虚拟目录。希望这可以帮助某些人。
@if (false)
{
<script src="http://localhost/Shared/jQuery/js/jquery-1.7.2-vsdoc.js" type="text/javascript"></script>
}
我已经创建了一个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>
<%
}
%>
<%:Html.Script("~/Scripts/jquery-ui-1.8.9.custom.min.js")%>
我现在有了智能感应和正确的运行时引用。
感谢Sruly提供的if(false)
技巧。